emitter = ensure_libs)
jdk_env['BUILD_DIR'] = env.get('BUILD_DIR')
cmdBuildNotificationConsumerApp=jdk_env.Gradle(target="app/apk",
- source=["app/src/main/java/com/sec/noticonsumerexample/MainActivity.java",
- "app/src/main/java/com/sec/noticonsumerexample/ConsumerSample.java"])
+ source=["app/src/main/java/org/iotivity/service/ns/sample/consumer/MainActivity.java",
+ "app/src/main/java/org/iotivity/service/ns/sample/consumer/ConsumerSample.java"])
jdk_env.Clean(cmdBuildNotificationConsumerApp, '#/service/notification/examples/android/NotiConsumerExample/build')
Depends(cmdBuildNotificationConsumerApp, env.get('notificationAAR'))
* limitations under the License.
*/
-package com.sec.noticonsumerexample;
+package org.iotivity.service.ns.sample.consumer;
import android.app.Application;
import android.content.Context;
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-package com.sec.noticonsumerexample;
+package org.iotivity.service.ns.sample.consumer;
import android.util.Log;
<?xml version="1.0" encoding="utf-8"?>\r
<manifest xmlns:android="http://schemas.android.com/apk/res/android"\r
- package="com.sec.noticonsumerexample">\r
+ package="org.iotivity.service.ns.sample.consumer">\r
\r
<uses-feature android:name="android.hardware.nfc" />\r
<uses-permission android:name="android.permission.READ_PHONE_STATE" />\r
* limitations under the License.
******************************************************************/
-package com.sec.noticonsumerexample;
+package org.iotivity.service.ns.sample.consumer;
import android.content.Context;
import android.os.Handler;
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
-package com.sec.notiproviderexample;
+package org.iotivity.service.ns.sample.consumer;
import android.app.Activity;
import android.content.Intent;
import android.net.UrlQuerySanitizer;
-/******************************************************************\r
- * Copyright 2016 Samsung Electronics All Rights Reserved.\r
- * <p>\r
- * <p>\r
- * <p>\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * <p>\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * <p>\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- ******************************************************************/\r
-\r
-package com.sec.noticonsumerexample;\r
-\r
-import android.content.Intent;\r
-import android.os.Bundle;\r
-import android.os.Handler;\r
-import android.os.Message;\r
-import android.app.Activity;\r
-import android.util.Log;\r
-import android.view.View;\r
-import android.widget.Button;\r
-import android.widget.TextView;\r
-import android.widget.Toast;\r
-\r
-import org.iotivity.base.ErrorCode;\r
-import org.iotivity.base.OcAccountManager;\r
-import org.iotivity.base.OcConnectivityType;\r
-import org.iotivity.base.OcException;\r
-import org.iotivity.base.OcHeaderOption;\r
-import org.iotivity.base.OcPlatform;\r
-import org.iotivity.base.OcRepresentation;\r
-import org.iotivity.base.OcResource;\r
-import org.iotivity.service.ns.common.TopicsList;\r
-import org.iotivity.service.ns.common.Topic;\r
-\r
-import java.util.Arrays;\r
-import java.util.EnumSet;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-\r
-public class MainActivity extends Activity implements OcAccountManager.OnPostListener\r
-{\r
- private final String TAG = "NS_MAIN_ACTIVITY";\r
- private final int REQUEST_LOGIN = 1;\r
-\r
- public static final String deviceID = "9E09F4FE-978A-4BC3-B356-1F93BCA37829";\r
- public static final String CIServer = "coap+tcp://52.40.216.160:5683";\r
- public static final String RemoteAddress = "52.40.216.160:5683";\r
- public static final String MQCloudAddress = "52.78.151.180:5683";\r
- public static final String MQCloudTopic = "/oic/ps/notification";\r
-\r
- private Button btnStart;\r
- private Button btnStop;\r
- private Button btnRescan;\r
- private Button btnEnableRemoteService;\r
- private Button btnGetTopicList;\r
- private Button btnUpdateTopicList;\r
- private Button btnClearLog;\r
- private static TextView TvLog;\r
- private Button signUp, signIn, signOut;\r
- private Button subscribeMQ;\r
-\r
- private boolean isStarted = false;\r
-\r
- private ConsumerSample mConsumerSample = null;\r
- private OcAccountManager mAccountManager;\r
- String mAuthCode;\r
- String mAuthProvider;\r
- String mRefreshtoken;\r
- String mUserID;\r
- String mAccessToken;\r
-\r
- private static final int PROVIDER_DISCOVERED = 1;\r
- private static final int STATE_CHANGED = 2;\r
- private static final int MESSAGE_RECEIVED = 3;\r
- private static final int SYNCINFO_RECEIVED = 4;\r
- private static final int TOPICS_RECEIVED = 5;\r
-\r
- public static Handler mHandler = new Handler()\r
- {\r
- @Override\r
- public void handleMessage(Message msg)\r
- {\r
- switch (msg.what)\r
- {\r
- case PROVIDER_DISCOVERED:\r
- {\r
- String providerId = (String) msg.obj;\r
- if (providerId != null)\r
- {\r
- TvLog.append( providerId + "\n");\r
- }\r
- break;\r
- }\r
- case STATE_CHANGED:\r
- {\r
- String state = (String) msg.obj;\r
- if (state != null)\r
- {\r
- TvLog.append( state + "\n");\r
- }\r
- break;\r
- }\r
- case MESSAGE_RECEIVED:\r
- {\r
- String message = (String) msg.obj;\r
- if (message != null)\r
- {\r
- TvLog.append( message + "\n");\r
- }\r
- break;\r
- }\r
- case SYNCINFO_RECEIVED:\r
- {\r
- String sync = (String) msg.obj;\r
- if (sync != null)\r
- {\r
- TvLog.append( sync + "\n");\r
- }\r
- break;\r
- }\r
- case TOPICS_RECEIVED:\r
- {\r
- String topicList = (String) msg.obj;\r
- if (topicList != null)\r
- {\r
- TvLog.append( topicList + "\n");\r
- }\r
- break;\r
- }\r
- default:\r
- break;\r
- }\r
- }\r
- };\r
-\r
- public void showToast(final String toast)\r
- {\r
- runOnUiThread(new Runnable()\r
- {\r
- @Override\r
- public void run()\r
- {\r
- Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show();\r
- }\r
- });\r
- }\r
-\r
- @Override\r
- protected void onCreate(Bundle savedInstanceState)\r
- {\r
- super.onCreate(savedInstanceState);\r
- setContentView(R.layout.activity_main);\r
-\r
- btnStart = (Button) findViewById(R.id.BtnStart);\r
- btnStop = (Button) findViewById(R.id.BtnStop);\r
- btnRescan = (Button) findViewById(R.id.BtnRescan);\r
- btnEnableRemoteService = (Button) findViewById(R.id.BtnEnableRemoteService);\r
- btnGetTopicList = (Button) findViewById(R.id.BtnGetTopicList);\r
- btnUpdateTopicList = (Button) findViewById(R.id.BtnUpdateTopicList);\r
- btnClearLog = (Button) findViewById(R.id.BtnClearLog);\r
-\r
- signUp = (Button) findViewById(R.id.signup);\r
- signIn = (Button) findViewById(R.id.signin);\r
- signOut = (Button) findViewById(R.id.signout);\r
- subscribeMQ = (Button) findViewById(R.id.subscribeMQService);\r
- TvLog = (TextView) findViewById(R.id.TvLog);\r
-\r
- btnStart.setOnClickListener(mClickListener);\r
- btnStop.setOnClickListener(mClickListener);\r
- btnRescan.setOnClickListener(mClickListener);\r
- btnEnableRemoteService.setOnClickListener(mClickListener);\r
- btnGetTopicList.setOnClickListener(mClickListener);\r
- btnUpdateTopicList.setOnClickListener(mClickListener);\r
- btnClearLog.setOnClickListener(mClickListener);\r
-\r
- signIn.setEnabled(false);\r
- signOut.setEnabled(false);\r
- btnEnableRemoteService.setEnabled(false);\r
-\r
- signUp.setOnClickListener(mClickListener);\r
- signIn.setOnClickListener(mClickListener);\r
- signOut.setOnClickListener(mClickListener);\r
- subscribeMQ.setOnClickListener(mClickListener);\r
-\r
- mConsumerSample = new ConsumerSample(getApplicationContext());\r
- mConsumerSample.setHandler(mHandler);\r
- }\r
-\r
- @Override\r
- protected void onDestroy()\r
- {\r
- if (isStarted)\r
- mConsumerSample.stopNotificationConsumer();\r
- super.onDestroy();\r
- }\r
-\r
- Button.OnClickListener mClickListener = new View.OnClickListener()\r
- {\r
- public void onClick(View v)\r
- {\r
- switch (v.getId())\r
- {\r
- case R.id.BtnStart:\r
- {\r
- if (!isStarted)\r
- {\r
- Log.i(TAG, "Start NS Consumer Service");\r
-\r
- TvLog.setText("Start NS-Consumer\n");\r
- mConsumerSample.startNotificationConsumer();\r
- isStarted = true;\r
- }\r
- else\r
- {\r
- Log.e(TAG, "NS Consumer Service has already started");\r
- showToast("Error : Service has already started");\r
- }\r
- }\r
- break;\r
-\r
- case R.id.BtnStop:\r
- {\r
- if (!isStarted)\r
- {\r
- Log.e(TAG, "Fail to stop service. Service has not been started");\r
- showToast("Error : Service has not been started");\r
- break;\r
- }\r
- TvLog.append("Stop NS-Consumer\n");\r
- mConsumerSample.stopNotificationConsumer();\r
- isStarted = false;\r
- }\r
- break;\r
- case R.id.BtnRescan:\r
- {\r
- if (!isStarted)\r
- {\r
- Log.e(TAG, "Fail to rescan. Service has not been started");\r
- showToast("Error : Service has not been started");\r
- break;\r
- }\r
- TvLog.append("Rescan NS-Consumer\n");\r
- mConsumerSample.rescanProvider();\r
- }\r
- break;\r
- case R.id.BtnEnableRemoteService:\r
- {\r
- if (!isStarted)\r
- {\r
- Log.e(TAG, "Fail to Enable RemoteService. Service has not been started");\r
- showToast("Error : Service has not been started");\r
- break;\r
- }\r
- TvLog.append("EnableRemoteService NS-Consumer\n");\r
- mConsumerSample.enableRemoteService(RemoteAddress);\r
- }\r
- break;\r
- case R.id.BtnGetTopicList:\r
- {\r
- if (!isStarted)\r
- {\r
- Log.e(TAG, "Fail to GetTopicList. Service has not been started");\r
- showToast("Error : Service has not been started");\r
- break;\r
- }\r
- TvLog.append("GetTopicList NS-Consumer\n");\r
- mConsumerSample.getTopicsList();\r
- }\r
- break;\r
- case R.id.BtnUpdateTopicList:\r
- {\r
- if (!isStarted)\r
- {\r
- Log.e(TAG, "Fail to UpdateTopicList. Service has not been started");\r
- showToast("Error : Service has not been started");\r
- break;\r
- }\r
- if(mConsumerSample.getAcceptor())\r
- {\r
- Log.e(TAG, "Operation Not Allowed. ProviderService Acceptor is not Consumer");\r
- showToast("Operation Not Allowed. ProviderService Acceptor is not Consumer");\r
- break;\r
- }\r
- TvLog.append("UpdateTopicList NS-Consumer\n");\r
-\r
- TopicsList topicList = new TopicsList();\r
- topicList.addTopic("OCF_TOPIC1", Topic.TopicState.SUBSCRIBED);\r
- topicList.addTopic("OCF_TOPIC2", Topic.TopicState.SUBSCRIBED);\r
- topicList.addTopic("OCF_TOPIC3", Topic.TopicState.UNSUBSCRIBED);\r
-\r
- mConsumerSample.updateTopicList(topicList);\r
- }\r
- break;\r
- case R.id.BtnClearLog:\r
- {\r
- TvLog.setText("");\r
- }\r
- break;\r
- case R.id.signup: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Sign Up");\r
- showToast("Start ConsumerService First");\r
- break;\r
- }\r
- TvLog.append("Initiating SignUp\n");\r
- signUp();\r
- }\r
- break;\r
- case R.id.signin: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Sign In");\r
- showToast("Start ConsumerService First");\r
- break;\r
- }\r
- TvLog.append("Initiating SignIn\n");\r
- signIn();\r
- }\r
- break;\r
- case R.id.signout: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Sign out");\r
- showToast("Start ConsumerService First");\r
- break;\r
- }\r
- TvLog.append("Initiating SignOut\n");\r
- signOut();\r
- }\r
- break;\r
- case R.id.subscribeMQService: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to SubscribeMQService");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
- int result = mConsumerSample.subscribeMQService(MQCloudAddress, MQCloudTopic);\r
- TvLog.append("SubscribeMQService Result : " + result + "\n");\r
- }\r
- break;\r
- }\r
- }\r
- };\r
- public void logMessage(final String text) {\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- Message msg = new Message();\r
- msg.obj = text;\r
- TvLog.append(text + "\n");\r
- }\r
- });\r
- Log.i(TAG, text);\r
- }\r
- OcAccountManager.OnPostListener onSignUp = new OcAccountManager.OnPostListener() {\r
- @Override\r
- public synchronized void onPostCompleted(List<OcHeaderOption> list,\r
- OcRepresentation ocRepresentation) {\r
- logMessage("signUp was successful");\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- signIn.setEnabled(true);\r
- signUp.setEnabled(false);\r
- }\r
- });\r
- try {\r
- mUserID = ocRepresentation.getValue("uid");\r
- mAccessToken = ocRepresentation.getValue("accesstoken");\r
- mRefreshtoken = ocRepresentation.getValue("refreshtoken");\r
-\r
- logMessage("\tuserID: " + mUserID);\r
- logMessage("\taccessToken: " + mAccessToken);\r
- logMessage("\trefreshToken: " + mRefreshtoken);\r
-\r
- if (ocRepresentation.hasAttribute("expiresin")) {\r
- int expiresIn = ocRepresentation.getValue("expiresin");\r
- logMessage("\texpiresIn: " + expiresIn);\r
- }\r
- } catch (OcException e) {\r
- Log.e(TAG, e.toString());\r
- }\r
- }\r
-\r
-\r
- @Override\r
- public synchronized void onPostFailed(Throwable throwable) {\r
- logMessage("Failed to signUp");\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- Log.e(TAG, ocEx.toString());\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- logMessage("Error code: " + errCode);\r
- }\r
- }\r
- };\r
- OcAccountManager.OnPostListener onSignIn = new OcAccountManager.OnPostListener() {\r
- @Override\r
- public synchronized void onPostCompleted(List<OcHeaderOption> list,\r
- OcRepresentation ocRepresentation) {\r
- logMessage("signIn was successful");\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- signIn.setEnabled(false);\r
- signOut.setEnabled(true);\r
- btnEnableRemoteService.setEnabled(true);\r
- }\r
- });\r
-\r
- }\r
-\r
- @Override\r
- public synchronized void onPostFailed(Throwable throwable) {\r
- logMessage("Failed to signIn");\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- Log.e(TAG, ocEx.toString());\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- logMessage("Error code: " + errCode);\r
- if (ErrorCode.UNAUTHORIZED_REQ != errCode) {\r
- RefreshToken();\r
- }\r
- }\r
- }\r
- };\r
- OcAccountManager.OnPostListener onSignOut = new OcAccountManager.OnPostListener() {\r
- @Override\r
- public synchronized void onPostCompleted(List<OcHeaderOption> list,\r
- OcRepresentation ocRepresentation) {\r
- logMessage("signOut was successful");\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- signIn.setEnabled(true);\r
- signOut.setEnabled(false);\r
- btnEnableRemoteService.setEnabled(false);\r
- }\r
- });\r
-\r
- }\r
-\r
- @Override\r
- public synchronized void onPostFailed(Throwable throwable) {\r
- logMessage("Failed to signOut");\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- Log.e(TAG, ocEx.toString());\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- logMessage("Error code: " + errCode);\r
- if (ErrorCode.UNAUTHORIZED_REQ != errCode) {\r
- RefreshToken();\r
- }\r
- }\r
- }\r
- };\r
- @Override\r
- public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation ocRepresentation) {\r
-\r
- }\r
-\r
- @Override\r
- public void onPostFailed(Throwable throwable) {\r
-\r
- }\r
- private void signIn() {\r
- try {\r
- if(mAccountManager==null)\r
- {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- }\r
-\r
- mAccountManager.signIn(mUserID, mAccessToken, onSignIn);\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void signOut() {\r
- try {\r
- logMessage("signOut");\r
- if(mAccountManager==null)\r
- {\r
- try {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
- mAccountManager.signOut(mAccessToken, onSignOut);\r
- signIn.setEnabled(false);\r
- signUp.setEnabled(true);\r
- btnEnableRemoteService.setEnabled(false);\r
- logMessage("signOut Successful");\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void signUp() {\r
- try {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
-\r
- Intent intentLogin = new Intent(this,LoginActivity.class);\r
- startActivityForResult(intentLogin, REQUEST_LOGIN);\r
- }\r
- @Override\r
- public void onActivityResult(int requestCode, int resultCode, Intent data) {\r
- super.onActivityResult(requestCode, resultCode, data);\r
- if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) {\r
- mAuthCode = data.getStringExtra("authCode");\r
- mAuthProvider = data.getStringExtra("authProvider");\r
- logMessage("authCode: " + mAuthCode);\r
- logMessage("authProvider: " + mAuthProvider);\r
-\r
- try {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- logMessage("Calling signup API");\r
-\r
- mAccountManager.signUp(mAuthProvider, mAuthCode, onSignUp);\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
- }\r
-\r
- OcResource.OnPostListener onRefreshTokenPost = new OcResource.OnPostListener() {\r
- @Override\r
- public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {\r
- logMessage("RefreshToken Completed.");\r
- try {\r
- mAccessToken = ocRepresentation.getValue("accesstoken");\r
- mRefreshtoken = ocRepresentation.getValue("refreshtoken");\r
- }\r
- catch (OcException e)\r
- {\r
- e.printStackTrace();\r
- }\r
- signIn();\r
- }\r
-\r
- @Override\r
- public void onPostFailed(Throwable throwable) {\r
- logMessage("RefreshToken failed.");\r
- Log.d(TAG, "onRefreshTokenPost failed..");\r
- }\r
- };\r
- public void RefreshToken() {\r
- try {\r
- OcResource authResource = OcPlatform.constructResourceObject(CIServer, "/.well-known/ocf/account/tokenrefresh",\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),\r
- false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));\r
- OcRepresentation rep = new OcRepresentation();\r
-\r
- showToast("RefreshToken in progress..");\r
- logMessage("RefreshToken in progress..");\r
- rep.setValue("di", deviceID);\r
- rep.setValue("granttype", "refresh_token");\r
- rep.setValue("refreshtoken", mRefreshtoken);\r
- rep.setValue("uid", mUserID);\r
- authResource.post(rep, new HashMap<String, String>(), onRefreshTokenPost);\r
- }\r
- catch(OcException e)\r
- {\r
- e.printStackTrace();\r
- }\r
-\r
- Log.d(TAG, "No error while executing login");\r
- }\r
-}\r
+/******************************************************************
+ * Copyright 2016 Samsung Electronics All Rights Reserved.
+ * <p>
+ * <p>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************/
+
+package org.iotivity.service.ns.sample.consumer;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.app.Activity;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import org.iotivity.base.ErrorCode;
+import org.iotivity.base.OcAccountManager;
+import org.iotivity.base.OcConnectivityType;
+import org.iotivity.base.OcException;
+import org.iotivity.base.OcHeaderOption;
+import org.iotivity.base.OcPlatform;
+import org.iotivity.base.OcRepresentation;
+import org.iotivity.base.OcResource;
+import org.iotivity.service.ns.common.TopicsList;
+import org.iotivity.service.ns.common.Topic;
+
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+
+public class MainActivity extends Activity implements OcAccountManager.OnPostListener
+{
+ private final String TAG = "NS_MAIN_ACTIVITY";
+ private final int REQUEST_LOGIN = 1;
+
+ public static final String deviceID = "9E09F4FE-978A-4BC3-B356-1F93BCA37829";
+ public static final String CIServer = "coap+tcp://52.40.216.160:5683";
+ public static final String RemoteAddress = "52.40.216.160:5683";
+ public static final String MQCloudAddress = "52.78.151.180:5683";
+ public static final String MQCloudTopic = "/oic/ps/notification";
+
+ private Button btnStart;
+ private Button btnStop;
+ private Button btnRescan;
+ private Button btnEnableRemoteService;
+ private Button btnGetTopicList;
+ private Button btnUpdateTopicList;
+ private Button btnClearLog;
+ private static TextView TvLog;
+ private Button signUp, signIn, signOut;
+ private Button subscribeMQ;
+
+ private boolean isStarted = false;
+
+ private ConsumerSample mConsumerSample = null;
+ private OcAccountManager mAccountManager;
+ String mAuthCode;
+ String mAuthProvider;
+ String mRefreshtoken;
+ String mUserID;
+ String mAccessToken;
+
+ private static final int PROVIDER_DISCOVERED = 1;
+ private static final int STATE_CHANGED = 2;
+ private static final int MESSAGE_RECEIVED = 3;
+ private static final int SYNCINFO_RECEIVED = 4;
+ private static final int TOPICS_RECEIVED = 5;
+
+ public static Handler mHandler = new Handler()
+ {
+ @Override
+ public void handleMessage(Message msg)
+ {
+ switch (msg.what)
+ {
+ case PROVIDER_DISCOVERED:
+ {
+ String providerId = (String) msg.obj;
+ if (providerId != null)
+ {
+ TvLog.append( providerId + "\n");
+ }
+ break;
+ }
+ case STATE_CHANGED:
+ {
+ String state = (String) msg.obj;
+ if (state != null)
+ {
+ TvLog.append( state + "\n");
+ }
+ break;
+ }
+ case MESSAGE_RECEIVED:
+ {
+ String message = (String) msg.obj;
+ if (message != null)
+ {
+ TvLog.append( message + "\n");
+ }
+ break;
+ }
+ case SYNCINFO_RECEIVED:
+ {
+ String sync = (String) msg.obj;
+ if (sync != null)
+ {
+ TvLog.append( sync + "\n");
+ }
+ break;
+ }
+ case TOPICS_RECEIVED:
+ {
+ String topicList = (String) msg.obj;
+ if (topicList != null)
+ {
+ TvLog.append( topicList + "\n");
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ };
+
+ public void showToast(final String toast)
+ {
+ runOnUiThread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ btnStart = (Button) findViewById(R.id.BtnStart);
+ btnStop = (Button) findViewById(R.id.BtnStop);
+ btnRescan = (Button) findViewById(R.id.BtnRescan);
+ btnEnableRemoteService = (Button) findViewById(R.id.BtnEnableRemoteService);
+ btnGetTopicList = (Button) findViewById(R.id.BtnGetTopicList);
+ btnUpdateTopicList = (Button) findViewById(R.id.BtnUpdateTopicList);
+ btnClearLog = (Button) findViewById(R.id.BtnClearLog);
+
+ signUp = (Button) findViewById(R.id.signup);
+ signIn = (Button) findViewById(R.id.signin);
+ signOut = (Button) findViewById(R.id.signout);
+ subscribeMQ = (Button) findViewById(R.id.subscribeMQService);
+ TvLog = (TextView) findViewById(R.id.TvLog);
+
+ btnStart.setOnClickListener(mClickListener);
+ btnStop.setOnClickListener(mClickListener);
+ btnRescan.setOnClickListener(mClickListener);
+ btnEnableRemoteService.setOnClickListener(mClickListener);
+ btnGetTopicList.setOnClickListener(mClickListener);
+ btnUpdateTopicList.setOnClickListener(mClickListener);
+ btnClearLog.setOnClickListener(mClickListener);
+
+ signIn.setEnabled(false);
+ signOut.setEnabled(false);
+ btnEnableRemoteService.setEnabled(false);
+
+ signUp.setOnClickListener(mClickListener);
+ signIn.setOnClickListener(mClickListener);
+ signOut.setOnClickListener(mClickListener);
+ subscribeMQ.setOnClickListener(mClickListener);
+
+ mConsumerSample = new ConsumerSample(getApplicationContext());
+ mConsumerSample.setHandler(mHandler);
+ }
+
+ @Override
+ protected void onDestroy()
+ {
+ if (isStarted)
+ mConsumerSample.stopNotificationConsumer();
+ super.onDestroy();
+ }
+
+ Button.OnClickListener mClickListener = new View.OnClickListener()
+ {
+ public void onClick(View v)
+ {
+ switch (v.getId())
+ {
+ case R.id.BtnStart:
+ {
+ if (!isStarted)
+ {
+ Log.i(TAG, "Start NS Consumer Service");
+
+ TvLog.setText("Start NS-Consumer\n");
+ mConsumerSample.startNotificationConsumer();
+ isStarted = true;
+ }
+ else
+ {
+ Log.e(TAG, "NS Consumer Service has already started");
+ showToast("Error : Service has already started");
+ }
+ }
+ break;
+
+ case R.id.BtnStop:
+ {
+ if (!isStarted)
+ {
+ Log.e(TAG, "Fail to stop service. Service has not been started");
+ showToast("Error : Service has not been started");
+ break;
+ }
+ TvLog.append("Stop NS-Consumer\n");
+ mConsumerSample.stopNotificationConsumer();
+ isStarted = false;
+ }
+ break;
+ case R.id.BtnRescan:
+ {
+ if (!isStarted)
+ {
+ Log.e(TAG, "Fail to rescan. Service has not been started");
+ showToast("Error : Service has not been started");
+ break;
+ }
+ TvLog.append("Rescan NS-Consumer\n");
+ mConsumerSample.rescanProvider();
+ }
+ break;
+ case R.id.BtnEnableRemoteService:
+ {
+ if (!isStarted)
+ {
+ Log.e(TAG, "Fail to Enable RemoteService. Service has not been started");
+ showToast("Error : Service has not been started");
+ break;
+ }
+ TvLog.append("EnableRemoteService NS-Consumer\n");
+ mConsumerSample.enableRemoteService(RemoteAddress);
+ }
+ break;
+ case R.id.BtnGetTopicList:
+ {
+ if (!isStarted)
+ {
+ Log.e(TAG, "Fail to GetTopicList. Service has not been started");
+ showToast("Error : Service has not been started");
+ break;
+ }
+ TvLog.append("GetTopicList NS-Consumer\n");
+ mConsumerSample.getTopicsList();
+ }
+ break;
+ case R.id.BtnUpdateTopicList:
+ {
+ if (!isStarted)
+ {
+ Log.e(TAG, "Fail to UpdateTopicList. Service has not been started");
+ showToast("Error : Service has not been started");
+ break;
+ }
+ if(mConsumerSample.getAcceptor())
+ {
+ Log.e(TAG, "Operation Not Allowed. ProviderService Acceptor is not Consumer");
+ showToast("Operation Not Allowed. ProviderService Acceptor is not Consumer");
+ break;
+ }
+ TvLog.append("UpdateTopicList NS-Consumer\n");
+
+ TopicsList topicList = new TopicsList();
+ topicList.addTopic("OCF_TOPIC1", Topic.TopicState.SUBSCRIBED);
+ topicList.addTopic("OCF_TOPIC2", Topic.TopicState.SUBSCRIBED);
+ topicList.addTopic("OCF_TOPIC3", Topic.TopicState.UNSUBSCRIBED);
+
+ mConsumerSample.updateTopicList(topicList);
+ }
+ break;
+ case R.id.BtnClearLog:
+ {
+ TvLog.setText("");
+ }
+ break;
+ case R.id.signup: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Sign Up");
+ showToast("Start ConsumerService First");
+ break;
+ }
+ TvLog.append("Initiating SignUp\n");
+ signUp();
+ }
+ break;
+ case R.id.signin: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Sign In");
+ showToast("Start ConsumerService First");
+ break;
+ }
+ TvLog.append("Initiating SignIn\n");
+ signIn();
+ }
+ break;
+ case R.id.signout: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Sign out");
+ showToast("Start ConsumerService First");
+ break;
+ }
+ TvLog.append("Initiating SignOut\n");
+ signOut();
+ }
+ break;
+ case R.id.subscribeMQService: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to SubscribeMQService");
+ showToast("Start ProviderService First");
+ break;
+ }
+ int result = mConsumerSample.subscribeMQService(MQCloudAddress, MQCloudTopic);
+ TvLog.append("SubscribeMQService Result : " + result + "\n");
+ }
+ break;
+ }
+ }
+ };
+ public void logMessage(final String text) {
+ runOnUiThread(new Runnable() {
+ public void run() {
+ Message msg = new Message();
+ msg.obj = text;
+ TvLog.append(text + "\n");
+ }
+ });
+ Log.i(TAG, text);
+ }
+ OcAccountManager.OnPostListener onSignUp = new OcAccountManager.OnPostListener() {
+ @Override
+ public synchronized void onPostCompleted(List<OcHeaderOption> list,
+ OcRepresentation ocRepresentation) {
+ logMessage("signUp was successful");
+ runOnUiThread(new Runnable() {
+ public void run() {
+ signIn.setEnabled(true);
+ signUp.setEnabled(false);
+ }
+ });
+ try {
+ mUserID = ocRepresentation.getValue("uid");
+ mAccessToken = ocRepresentation.getValue("accesstoken");
+ mRefreshtoken = ocRepresentation.getValue("refreshtoken");
+
+ logMessage("\tuserID: " + mUserID);
+ logMessage("\taccessToken: " + mAccessToken);
+ logMessage("\trefreshToken: " + mRefreshtoken);
+
+ if (ocRepresentation.hasAttribute("expiresin")) {
+ int expiresIn = ocRepresentation.getValue("expiresin");
+ logMessage("\texpiresIn: " + expiresIn);
+ }
+ } catch (OcException e) {
+ Log.e(TAG, e.toString());
+ }
+ }
+
+
+ @Override
+ public synchronized void onPostFailed(Throwable throwable) {
+ logMessage("Failed to signUp");
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ Log.e(TAG, ocEx.toString());
+ ErrorCode errCode = ocEx.getErrorCode();
+ logMessage("Error code: " + errCode);
+ }
+ }
+ };
+ OcAccountManager.OnPostListener onSignIn = new OcAccountManager.OnPostListener() {
+ @Override
+ public synchronized void onPostCompleted(List<OcHeaderOption> list,
+ OcRepresentation ocRepresentation) {
+ logMessage("signIn was successful");
+ runOnUiThread(new Runnable() {
+ public void run() {
+ signIn.setEnabled(false);
+ signOut.setEnabled(true);
+ btnEnableRemoteService.setEnabled(true);
+ }
+ });
+
+ }
+
+ @Override
+ public synchronized void onPostFailed(Throwable throwable) {
+ logMessage("Failed to signIn");
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ Log.e(TAG, ocEx.toString());
+ ErrorCode errCode = ocEx.getErrorCode();
+ logMessage("Error code: " + errCode);
+ if (ErrorCode.UNAUTHORIZED_REQ != errCode) {
+ RefreshToken();
+ }
+ }
+ }
+ };
+ OcAccountManager.OnPostListener onSignOut = new OcAccountManager.OnPostListener() {
+ @Override
+ public synchronized void onPostCompleted(List<OcHeaderOption> list,
+ OcRepresentation ocRepresentation) {
+ logMessage("signOut was successful");
+ runOnUiThread(new Runnable() {
+ public void run() {
+ signIn.setEnabled(true);
+ signOut.setEnabled(false);
+ btnEnableRemoteService.setEnabled(false);
+ }
+ });
+
+ }
+
+ @Override
+ public synchronized void onPostFailed(Throwable throwable) {
+ logMessage("Failed to signOut");
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ Log.e(TAG, ocEx.toString());
+ ErrorCode errCode = ocEx.getErrorCode();
+ logMessage("Error code: " + errCode);
+ if (ErrorCode.UNAUTHORIZED_REQ != errCode) {
+ RefreshToken();
+ }
+ }
+ }
+ };
+ @Override
+ public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation ocRepresentation) {
+
+ }
+
+ @Override
+ public void onPostFailed(Throwable throwable) {
+
+ }
+ private void signIn() {
+ try {
+ if(mAccountManager==null)
+ {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ }
+
+ mAccountManager.signIn(mUserID, mAccessToken, onSignIn);
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void signOut() {
+ try {
+ logMessage("signOut");
+ if(mAccountManager==null)
+ {
+ try {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+ mAccountManager.signOut(mAccessToken, onSignOut);
+ signIn.setEnabled(false);
+ signUp.setEnabled(true);
+ btnEnableRemoteService.setEnabled(false);
+ logMessage("signOut Successful");
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void signUp() {
+ try {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+
+ Intent intentLogin = new Intent(this,LoginActivity.class);
+ startActivityForResult(intentLogin, REQUEST_LOGIN);
+ }
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) {
+ mAuthCode = data.getStringExtra("authCode");
+ mAuthProvider = data.getStringExtra("authProvider");
+ logMessage("authCode: " + mAuthCode);
+ logMessage("authProvider: " + mAuthProvider);
+
+ try {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ logMessage("Calling signup API");
+
+ mAccountManager.signUp(mAuthProvider, mAuthCode, onSignUp);
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ OcResource.OnPostListener onRefreshTokenPost = new OcResource.OnPostListener() {
+ @Override
+ public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
+ logMessage("RefreshToken Completed.");
+ try {
+ mAccessToken = ocRepresentation.getValue("accesstoken");
+ mRefreshtoken = ocRepresentation.getValue("refreshtoken");
+ }
+ catch (OcException e)
+ {
+ e.printStackTrace();
+ }
+ signIn();
+ }
+
+ @Override
+ public void onPostFailed(Throwable throwable) {
+ logMessage("RefreshToken failed.");
+ Log.d(TAG, "onRefreshTokenPost failed..");
+ }
+ };
+ public void RefreshToken() {
+ try {
+ OcResource authResource = OcPlatform.constructResourceObject(CIServer, "/.well-known/ocf/account/tokenrefresh",
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),
+ false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));
+ OcRepresentation rep = new OcRepresentation();
+
+ showToast("RefreshToken in progress..");
+ logMessage("RefreshToken in progress..");
+ rep.setValue("di", deviceID);
+ rep.setValue("granttype", "refresh_token");
+ rep.setValue("refreshtoken", mRefreshtoken);
+ rep.setValue("uid", mUserID);
+ authResource.post(rep, new HashMap<String, String>(), onRefreshTokenPost);
+ }
+ catch(OcException e)
+ {
+ e.printStackTrace();
+ }
+
+ Log.d(TAG, "No error while executing login");
+ }
+}
android:paddingLeft="@dimen/activity_horizontal_margin"\r
android:paddingRight="@dimen/activity_horizontal_margin"\r
android:paddingTop="@dimen/activity_vertical_margin"\r
- tools:context="com.sec.noticonsumerexample.MainActivity">\r
+ tools:context=".MainActivity">\r
\r
<ScrollView\r
android:layout_width="match_parent"\r
emitter = ensure_libs)
jdk_env['BUILD_DIR'] = env.get('BUILD_DIR')
cmdBuildNotificationProviderApp=jdk_env.Gradle(target="app/apk",
- source=["app/src/main/java/com/sec/notiproviderexample/MainActivity.java",
- "app/src/main/java/com/sec/notiproviderexample/NotiListener.java",
- "app/src/main/java/com/sec/notiproviderexample/ProviderSample.java"])
+ source=["app/src/main/java/org/iotivity/service/ns/sample/provider/MainActivity.java",
+ "app/src/main/java/org/iotivity/service/ns/sample/provider/NotiListener.java",
+ "app/src/main/java/org/iotivity/service/ns/sample/provider/ProviderSample.java"])
jdk_env.Clean(cmdBuildNotificationProviderApp, '#/service/notification/examples/android/NotiProviderExample/build')
Depends(cmdBuildNotificationProviderApp, env.get('notificationAAR'))
}
defaultConfig {
- applicationId "sample.notification.service.iotivity.org.notificationsample"
+ applicationId "sample.notification.service.iotivity.org.notificationprovidersample"
minSdkVersion 21
targetSdkVersion 21
versionCode 1
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-package com.sec.notiproviderexample;
+package org.iotivity.service.ns.sample.provider;
import android.util.Log;
* limitations under the License.
*/
-package com.sec.notiproviderexample;
+package org.iotivity.service.ns.sample.provider;
import java.util.Iterator;
import java.util.Vector;
<?xml version="1.0" encoding="utf-8"?>\r
<manifest xmlns:android="http://schemas.android.com/apk/res/android"\r
- package="com.sec.notiproviderexample">\r
+ package="org.iotivity.service.ns.sample.provider">\r
\r
<uses-feature android:name="android.hardware.nfc" />\r
<uses-permission android:name="android.permission.READ_PHONE_STATE" />\r
</activity>\r
<activity android:name=".LoginActivity" />\r
<service\r
- android:name="com.sec.notiproviderexample.NotiListener"\r
+ android:name=".NotiListener"\r
android:label="@string/app_name"\r
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">\r
\r
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
-package com.sec.noticonsumerexample;
+package org.iotivity.service.ns.sample.provider;
import android.app.Activity;
import android.content.Intent;
import android.net.UrlQuerySanitizer;
-/*\r
-//******************************************************************\r
-//\r
-// Copyright 2016 Samsung Electronics All Rights Reserved.\r
-//\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-//\r
-// Licensed under the Apache License, Version 2.0 (the "License");\r
-// you may not use this file except in compliance with the License.\r
-// You may obtain a copy of the License at\r
-//\r
-// http://www.apache.org/licenses/LICENSE-2.0\r
-//\r
-// Unless required by applicable law or agreed to in writing, software\r
-// distributed under the License is distributed on an "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-// See the License for the specific language governing permissions and\r
-// limitations under the License.\r
-//\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- */\r
-\r
-package com.sec.notiproviderexample;\r
-\r
-import android.app.Notification;\r
-import android.app.NotificationManager;\r
-import android.content.Intent;\r
-import android.os.Bundle;\r
-import android.os.Handler;\r
-import android.os.Message;\r
-import android.util.Log;\r
-import android.view.View;\r
-import android.widget.Button;\r
-import android.widget.EditText;\r
-import android.widget.RadioButton;\r
-import android.widget.TextView;\r
-import android.widget.Toast;\r
-import android.app.Activity;\r
-\r
-import org.iotivity.base.ErrorCode;\r
-import org.iotivity.base.OcAccountManager;\r
-import org.iotivity.base.OcConnectivityType;\r
-import org.iotivity.base.OcException;\r
-import org.iotivity.base.OcHeaderOption;\r
-import org.iotivity.base.OcPlatform;\r
-import org.iotivity.base.OcRepresentation;\r
-import org.iotivity.base.OcResource;\r
-\r
-import java.util.Arrays;\r
-import java.util.EnumSet;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-\r
-public class MainActivity extends Activity implements OcAccountManager.OnPostListener {\r
-\r
- private final String TAG = "NS_MAIN_ACTIVITY";\r
- private static final int CONSUMER_SUBSCRIBED = 1;\r
- private static final int MESSAGE_SYNC = 2;\r
- private final int REQUEST_LOGIN = 1;\r
-\r
- public static final String deviceID = "9E09F4FE-978A-4BC3-B356-1F93BCA37829";\r
- public static final String CIServer = "coap+tcp://52.40.216.160:5683";\r
- public static final String RemoteAddress = "52.40.216.160:5683";\r
- public static final String MQCloudAddress = "52.78.151.180:5683";\r
- public static final String MQCloudTopic = "/oic/ps/notification";\r
-\r
- private Button btnTitle;\r
- private Button btnBody;\r
- private Button btnTopic;\r
- private Button btnSend;\r
- private Button btnStart;\r
- private Button btnRegister;\r
- private Button btnSet;\r
- private Button btnStop;\r
- private Button btnLog;\r
- private Button signUp, signIn, signOut;\r
- private Button remoteService, subscribeMQ;\r
- private EditText editTextTitle;\r
- private EditText editTextBody;\r
- private EditText editTextTopic;\r
- private RadioButton radioProvider;\r
- private RadioButton radioConsumer;\r
- private static TextView TvLog;\r
-\r
- private OcAccountManager mAccountManager;\r
- String mAuthCode;\r
- String mAuthProvider;\r
- String mRefreshtoken;\r
- String mUserID;\r
- String mAccessToken;\r
-\r
- private static int notiId = 100;\r
- private boolean isStarted = false;\r
- private boolean gAcceptor = true;\r
- private boolean gRemoteService = true;\r
-\r
- private NotiListener mNotiListener = null;\r
- private ProviderSample mProviderSample = null;\r
-\r
- public static Handler mHandler = new Handler() {\r
- @Override\r
- public void handleMessage(Message msg) {\r
- switch (msg.what) {\r
- case CONSUMER_SUBSCRIBED:\r
- String ConsumerId = (String) msg.obj;\r
- if(ConsumerId != null)\r
- TvLog.append("Consumer Subscibed: " + ConsumerId + "\n");\r
- break;\r
-\r
- case MESSAGE_SYNC:\r
- String sync = (String) msg.obj;\r
- if(sync != null)\r
- TvLog.append("SyncInfo Received :" + sync + "\n");\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- }\r
- };\r
-\r
- public void showToast(final String toast)\r
- {\r
- runOnUiThread(new Runnable() {\r
- @Override\r
- public void run() {\r
- Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show();\r
- }\r
- });\r
- }\r
-\r
- @Override\r
- protected void onCreate(Bundle savedInstanceState) {\r
- super.onCreate(savedInstanceState);\r
- setContentView(R.layout.activity_main);\r
-\r
- btnTitle = (Button) findViewById(R.id.BtnTitle);\r
- btnBody = (Button) findViewById(R.id.BtnBody);\r
- btnTopic = (Button) findViewById(R.id.BtnTopic);\r
- btnSend = (Button) findViewById(R.id.BtnCreateNoti);\r
-\r
- btnStart = (Button) findViewById(R.id.BtnStart);\r
- btnRegister = (Button) findViewById(R.id.BtnRegister);\r
- btnSet = (Button) findViewById(R.id.BtnSet);\r
- btnLog = (Button) findViewById(R.id.BtnLog);\r
- btnStop = (Button) findViewById(R.id.BtnStop);\r
-\r
- signUp = (Button) findViewById(R.id.signup);\r
- signIn = (Button) findViewById(R.id.signin);\r
- signOut = (Button) findViewById(R.id.signout);\r
- remoteService = (Button) findViewById(R.id.remoteService);\r
- subscribeMQ = (Button) findViewById(R.id.subscribeMQService);\r
-\r
- editTextTitle = (EditText) findViewById(R.id.EditTextTitle);\r
- editTextBody = (EditText) findViewById(R.id.EditTextBody);\r
- editTextTopic = (EditText) findViewById(R.id.EditTextTopic);\r
-\r
- radioProvider = (RadioButton) findViewById(R.id.RadioProvider);\r
- radioConsumer = (RadioButton) findViewById(R.id.RadioConsumer);\r
-\r
- TvLog = (TextView) findViewById(R.id.TvLog);\r
-\r
- btnTitle.setEnabled(false);\r
- btnBody.setEnabled(false);\r
- btnTopic.setEnabled(false);\r
-\r
- signIn.setEnabled(false);\r
- signOut.setEnabled(false);\r
- remoteService.setEnabled(false);\r
-\r
- btnSend.setOnClickListener(mClickListener);\r
- btnStart.setOnClickListener(mClickListener);\r
- btnRegister.setOnClickListener(mClickListener);\r
- btnSet.setOnClickListener(mClickListener);\r
- btnLog.setOnClickListener(mClickListener);\r
- btnStop.setOnClickListener(mClickListener);\r
- radioProvider.setOnClickListener(mClickListener);\r
- radioConsumer.setOnClickListener(mClickListener);\r
-\r
- signUp.setOnClickListener(mClickListener);\r
- signIn.setOnClickListener(mClickListener);\r
- signOut.setOnClickListener(mClickListener);\r
-\r
- remoteService.setOnClickListener(mClickListener);\r
- subscribeMQ.setOnClickListener(mClickListener);\r
-\r
- mProviderSample = new ProviderSample(getApplicationContext());\r
- mProviderSample.setHandler(mHandler);\r
-\r
- mNotiListener = new NotiListener(this);\r
- Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");\r
- startActivity(intent);\r
- }\r
-\r
- @Override\r
- protected void onDestroy() {\r
- super.onDestroy();\r
- }\r
-\r
- public ProviderSample getProviderSample()\r
- {\r
- return mProviderSample;\r
- }\r
-\r
- Button.OnClickListener mClickListener = new View.OnClickListener() {\r
- public void onClick(View v) {\r
- switch (v.getId()) {\r
- case R.id.RadioProvider: {\r
- if (isStarted == false) {\r
- gAcceptor = true;\r
- showToast("Provider as acceptor is " + gAcceptor);\r
- }\r
- else\r
- showToast("Start ProviderService again to change acceptor as provider");\r
- }\r
- break;\r
-\r
- case R.id.RadioConsumer: {\r
- if (isStarted == false) {\r
- gAcceptor = false;\r
- showToast("Provider as acceptor is "+ gAcceptor);\r
- }\r
- else\r
- showToast("Start ProviderService again to change acceptor as consumer");\r
- }\r
- break;\r
-\r
- case R.id.BtnStart: {\r
- if (isStarted == false) {\r
- Log.i(TAG, "Start Provider Service");\r
- TvLog.setText("Start Provider Service\n");\r
- mProviderSample.Start(gAcceptor);\r
- isStarted = true;\r
- radioProvider.setEnabled(false);\r
- radioConsumer.setEnabled(false);\r
- } else {\r
- Log.e(TAG, " Provider Service had already started");\r
- showToast(" Provider Service had already started");\r
- }\r
- }\r
- break;\r
-\r
- case R.id.BtnRegister: {\r
- if (isStarted == false) {\r
- Log.i(TAG, "Start Provider Service");\r
- TvLog.append("Register Topic : OCF_TOPIC1\n");\r
- TvLog.append("Register Topic : OCF_TOPIC2\n");\r
- TvLog.append("Register Topic : OCF_TOPIC3\n");\r
- TvLog.append("Register Topic : OCF_TOPIC4\n");\r
- showToast("Start Provider Service First");\r
- break;\r
- }\r
- mProviderSample.RegisterTopic();\r
-\r
- }\r
- break;\r
-\r
- case R.id.BtnSet: {\r
- if (isStarted == false) {\r
- Log.i(TAG, "Start Provider Service");\r
- TvLog.append("Set Topic : OCF_TOPIC1\n");\r
- TvLog.append("Set Topic : OCF_TOPIC2\n");\r
- TvLog.append("Set Topic : OCF_TOPIC3\n");\r
- TvLog.append("Set Topic : OCF_TOPIC4\n");\r
- showToast("Start Provider Service First");\r
- break;\r
- }\r
- if(gAcceptor == false){\r
- showToast("Operation Not Permitted: \nStart Provider Service with provider as acceptor");\r
- break;\r
- }\r
- mProviderSample.SetTopic();\r
-\r
- }\r
- break;\r
-\r
- case R.id.BtnCreateNoti: {\r
-\r
- String id = Integer.toString(notiId); // generate notificaion ID\r
- String title = editTextTitle.getText().toString();\r
- String body = editTextBody.getText().toString();\r
- String topic = editTextTopic.getText().toString();\r
-\r
- if(isStarted == false)\r
- {\r
- Log.e(TAG, "Fail to send NSMessage");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
-\r
- // Build android noti object and send it to Notification service receiver\r
- Notification.Builder notiBuilder = new Notification.Builder(getApplicationContext());\r
- notiBuilder.setContentTitle(title);\r
- notiBuilder.setContentText(body);\r
- notiBuilder.setPriority(Notification.PRIORITY_MAX);\r
- notiBuilder.setDefaults(Notification.DEFAULT_ALL);\r
- notiBuilder.setSmallIcon(R.mipmap.ic_launcher);\r
- NotificationManager notiMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);\r
- notiMgr.notify(notiId, notiBuilder.build());\r
-\r
- Log.i(TAG, "#" + notiId + " notified ..");\r
- TvLog.append("Send Notitication(Msg ID: " + notiId + ")\n");\r
- notiId++;\r
- }\r
- break;\r
-\r
- case R.id.BtnStop: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to stop service");\r
- showToast("Already Stopped");\r
- break;\r
- }\r
-\r
- mProviderSample.Stop();\r
- isStarted = false;\r
- radioProvider.setEnabled(true);\r
- radioConsumer.setEnabled(true);\r
- showToast("Stopped ProviderService"+ isStarted);\r
- TvLog.append("Stop Provider Service\n");\r
- }\r
- break;\r
-\r
- case R.id.BtnLog: {\r
-\r
- TvLog.setText("");\r
- }\r
- break;\r
- case R.id.signup: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Sign Up");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
- TvLog.append("Initiating SignUp\n");\r
- signUp();\r
- }\r
- break;\r
- case R.id.signin: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Sign In");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
- TvLog.append("Initiating SignIn\n");\r
- signIn();\r
- }\r
- break;\r
- case R.id.signout: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Sign out");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
- TvLog.append("Initiating SignOut\n");\r
- signOut();\r
- }\r
- break;\r
- case R.id.remoteService: {\r
- remoteService.setEnabled(false);\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to Enable/Disable RemoteService");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
- if(gRemoteService){\r
- TvLog.append("Enable Remote Service\n");\r
- int result = mProviderSample.EnableRemoteService(RemoteAddress);\r
- remoteService.setText(R.string.disableRemoteService);\r
- gRemoteService = false;\r
- remoteService.setEnabled(true);\r
- TvLog.append("EnableRemoteService Result : " + result + "\n");\r
- }\r
- else {\r
- TvLog.append("Disable Remote Service\n");\r
- int result = mProviderSample.DisableRemoteService(RemoteAddress);\r
- remoteService.setText(R.string.enableRemoteService);\r
- gRemoteService = true;\r
- remoteService.setEnabled(true);\r
- TvLog.append("DisableRemoteService Result : " + result + "\n");\r
- }\r
- }\r
- break;\r
- case R.id.subscribeMQService: {\r
- if(isStarted == false) {\r
- Log.e(TAG, "Fail to SubscribeMQService");\r
- showToast("Start ProviderService First");\r
- break;\r
- }\r
- int result = mProviderSample.subscribeMQService(MQCloudAddress, MQCloudTopic);\r
- TvLog.append("SubscribeMQService Result : " + result + "\n");\r
- }\r
- break;\r
- }\r
- }\r
- };\r
- public void logMessage(final String text) {\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- Message msg = new Message();\r
- msg.obj = text;\r
- TvLog.append(text + "\n");\r
- }\r
- });\r
- Log.i(TAG, text);\r
- }\r
- OcAccountManager.OnPostListener onSignUp = new OcAccountManager.OnPostListener() {\r
- @Override\r
- public synchronized void onPostCompleted(List<OcHeaderOption> list,\r
- OcRepresentation ocRepresentation) {\r
- logMessage("signUp was successful");\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- signIn.setEnabled(true);\r
- signUp.setEnabled(false);\r
- }\r
- });\r
- try {\r
- mUserID = ocRepresentation.getValue("uid");\r
- mAccessToken = ocRepresentation.getValue("accesstoken");\r
- mRefreshtoken = ocRepresentation.getValue("refreshtoken");\r
-\r
- logMessage("\tuserID: " + mUserID);\r
- logMessage("\taccessToken: " + mAccessToken);\r
- logMessage("\trefreshToken: " + mRefreshtoken);\r
-\r
- if (ocRepresentation.hasAttribute("expiresin")) {\r
- int expiresIn = ocRepresentation.getValue("expiresin");\r
- logMessage("\texpiresIn: " + expiresIn);\r
- }\r
- } catch (OcException e) {\r
- Log.e(TAG, e.toString());\r
- }\r
- }\r
-\r
-\r
- @Override\r
- public synchronized void onPostFailed(Throwable throwable) {\r
- logMessage("Failed to signUp");\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- Log.e(TAG, ocEx.toString());\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- logMessage("Error code: " + errCode);\r
- }\r
- }\r
- };\r
- OcAccountManager.OnPostListener onSignIn = new OcAccountManager.OnPostListener() {\r
- @Override\r
- public synchronized void onPostCompleted(List<OcHeaderOption> list,\r
- OcRepresentation ocRepresentation) {\r
- logMessage("signIn was successful");\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- signIn.setEnabled(false);\r
- signOut.setEnabled(true);\r
- remoteService.setEnabled(true);\r
- }\r
- });\r
-\r
- }\r
-\r
- @Override\r
- public synchronized void onPostFailed(Throwable throwable) {\r
- logMessage("Failed to signIn");\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- Log.e(TAG, ocEx.toString());\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- logMessage("Error code: " + errCode);\r
- if (ErrorCode.UNAUTHORIZED_REQ != errCode) {\r
- RefreshToken();\r
- }\r
- }\r
- }\r
- };\r
- OcAccountManager.OnPostListener onSignOut = new OcAccountManager.OnPostListener() {\r
- @Override\r
- public synchronized void onPostCompleted(List<OcHeaderOption> list,\r
- OcRepresentation ocRepresentation) {\r
- logMessage("signOut was successful");\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- signIn.setEnabled(true);\r
- signOut.setEnabled(false);\r
- remoteService.setEnabled(false);\r
- }\r
- });\r
-\r
- }\r
-\r
- @Override\r
- public synchronized void onPostFailed(Throwable throwable) {\r
- logMessage("Failed to signOut");\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- Log.e(TAG, ocEx.toString());\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- logMessage("Error code: " + errCode);\r
- if (ErrorCode.UNAUTHORIZED_REQ != errCode) {\r
- RefreshToken();\r
- }\r
- }\r
- }\r
- };\r
- @Override\r
- public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation ocRepresentation) {\r
-\r
- }\r
-\r
- @Override\r
- public void onPostFailed(Throwable throwable) {\r
-\r
- }\r
- private void signIn() {\r
- try {\r
- if(mAccountManager==null)\r
- {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- }\r
-\r
- mAccountManager.signIn(mUserID, mAccessToken, onSignIn);\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void signOut() {\r
- try {\r
- logMessage("signOut");\r
- if(mAccountManager==null)\r
- {\r
- try {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
- mAccountManager.signOut(mAccessToken, onSignOut);\r
- signIn.setEnabled(false);\r
- signUp.setEnabled(true);\r
- remoteService.setEnabled(false);\r
- logMessage("signOut Successful");\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void signUp() {\r
- try {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
-\r
- Intent intentLogin = new Intent(this, LoginActivity.class);\r
- startActivityForResult(intentLogin, REQUEST_LOGIN);\r
- }\r
- @Override\r
- public void onActivityResult(int requestCode, int resultCode, Intent data) {\r
- super.onActivityResult(requestCode, resultCode, data);\r
- if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) {\r
- mAuthCode = data.getStringExtra("authCode");\r
- mAuthProvider = data.getStringExtra("authProvider");\r
- logMessage("authCode: " + mAuthCode);\r
- logMessage("authProvider: " + mAuthProvider);\r
-\r
- try {\r
- mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));\r
- logMessage("Calling signup API");\r
-\r
- mAccountManager.signUp(mAuthProvider, mAuthCode, onSignUp);\r
- } catch (OcException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
- }\r
-\r
- OcResource.OnPostListener onRefreshTokenPost = new OcResource.OnPostListener() {\r
- @Override\r
- public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {\r
- logMessage("RefreshToken Completed.");\r
- try {\r
- mAccessToken = ocRepresentation.getValue("accesstoken");\r
- mRefreshtoken = ocRepresentation.getValue("refreshtoken");\r
- }\r
- catch (OcException e)\r
- {\r
- e.printStackTrace();\r
- }\r
- signIn();\r
- }\r
-\r
- @Override\r
- public void onPostFailed(Throwable throwable) {\r
- logMessage("RefreshToken failed.");\r
- Log.d(TAG, "onRefreshTokenPost failed..");\r
- }\r
- };\r
- public void RefreshToken() {\r
- try {\r
- OcResource authResource = OcPlatform.constructResourceObject(CIServer, "/.well-known/ocf/account/tokenrefresh",\r
- EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),\r
- false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));\r
- OcRepresentation rep = new OcRepresentation();\r
-\r
- showToast("RefreshToken in progress..");\r
- logMessage("RefreshToken in progress..");\r
- rep.setValue("di", deviceID);\r
- rep.setValue("granttype", "refresh_token");\r
- rep.setValue("refreshtoken", mRefreshtoken);\r
- rep.setValue("uid", mUserID);\r
- authResource.post(rep, new HashMap<String, String>(), onRefreshTokenPost);\r
- }\r
- catch(OcException e)\r
- {\r
- e.printStackTrace();\r
- }\r
-\r
- Log.d(TAG, "No error while executing login");\r
- }\r
-}\r
-\r
+/*
+//******************************************************************
+//
+// Copyright 2016 Samsung Electronics All Rights Reserved.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ */
+
+package org.iotivity.service.ns.sample.provider;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import android.widget.Toast;
+import android.app.Activity;
+
+import org.iotivity.base.ErrorCode;
+import org.iotivity.base.OcAccountManager;
+import org.iotivity.base.OcConnectivityType;
+import org.iotivity.base.OcException;
+import org.iotivity.base.OcHeaderOption;
+import org.iotivity.base.OcPlatform;
+import org.iotivity.base.OcRepresentation;
+import org.iotivity.base.OcResource;
+
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+
+public class MainActivity extends Activity implements OcAccountManager.OnPostListener {
+
+ private final String TAG = "NS_MAIN_ACTIVITY";
+ private static final int CONSUMER_SUBSCRIBED = 1;
+ private static final int MESSAGE_SYNC = 2;
+ private final int REQUEST_LOGIN = 1;
+
+ public static final String deviceID = "9E09F4FE-978A-4BC3-B356-1F93BCA37829";
+ public static final String CIServer = "coap+tcp://52.40.216.160:5683";
+ public static final String RemoteAddress = "52.40.216.160:5683";
+ public static final String MQCloudAddress = "52.78.151.180:5683";
+ public static final String MQCloudTopic = "/oic/ps/notification";
+
+ private Button btnTitle;
+ private Button btnBody;
+ private Button btnTopic;
+ private Button btnSend;
+ private Button btnStart;
+ private Button btnRegister;
+ private Button btnSet;
+ private Button btnStop;
+ private Button btnLog;
+ private Button signUp, signIn, signOut;
+ private Button remoteService, subscribeMQ;
+ private EditText editTextTitle;
+ private EditText editTextBody;
+ private EditText editTextTopic;
+ private RadioButton radioProvider;
+ private RadioButton radioConsumer;
+ private static TextView TvLog;
+
+ private OcAccountManager mAccountManager;
+ String mAuthCode;
+ String mAuthProvider;
+ String mRefreshtoken;
+ String mUserID;
+ String mAccessToken;
+
+ private static int notiId = 100;
+ private boolean isStarted = false;
+ private boolean gAcceptor = true;
+ private boolean gRemoteService = true;
+
+ private NotiListener mNotiListener = null;
+ private ProviderSample mProviderSample = null;
+
+ public static Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case CONSUMER_SUBSCRIBED:
+ String ConsumerId = (String) msg.obj;
+ if(ConsumerId != null)
+ TvLog.append("Consumer Subscibed: " + ConsumerId + "\n");
+ break;
+
+ case MESSAGE_SYNC:
+ String sync = (String) msg.obj;
+ if(sync != null)
+ TvLog.append("SyncInfo Received :" + sync + "\n");
+ break;
+
+ default:
+ break;
+ }
+ }
+ };
+
+ public void showToast(final String toast)
+ {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ btnTitle = (Button) findViewById(R.id.BtnTitle);
+ btnBody = (Button) findViewById(R.id.BtnBody);
+ btnTopic = (Button) findViewById(R.id.BtnTopic);
+ btnSend = (Button) findViewById(R.id.BtnCreateNoti);
+
+ btnStart = (Button) findViewById(R.id.BtnStart);
+ btnRegister = (Button) findViewById(R.id.BtnRegister);
+ btnSet = (Button) findViewById(R.id.BtnSet);
+ btnLog = (Button) findViewById(R.id.BtnLog);
+ btnStop = (Button) findViewById(R.id.BtnStop);
+
+ signUp = (Button) findViewById(R.id.signup);
+ signIn = (Button) findViewById(R.id.signin);
+ signOut = (Button) findViewById(R.id.signout);
+ remoteService = (Button) findViewById(R.id.remoteService);
+ subscribeMQ = (Button) findViewById(R.id.subscribeMQService);
+
+ editTextTitle = (EditText) findViewById(R.id.EditTextTitle);
+ editTextBody = (EditText) findViewById(R.id.EditTextBody);
+ editTextTopic = (EditText) findViewById(R.id.EditTextTopic);
+
+ radioProvider = (RadioButton) findViewById(R.id.RadioProvider);
+ radioConsumer = (RadioButton) findViewById(R.id.RadioConsumer);
+
+ TvLog = (TextView) findViewById(R.id.TvLog);
+
+ btnTitle.setEnabled(false);
+ btnBody.setEnabled(false);
+ btnTopic.setEnabled(false);
+
+ signIn.setEnabled(false);
+ signOut.setEnabled(false);
+ remoteService.setEnabled(false);
+
+ btnSend.setOnClickListener(mClickListener);
+ btnStart.setOnClickListener(mClickListener);
+ btnRegister.setOnClickListener(mClickListener);
+ btnSet.setOnClickListener(mClickListener);
+ btnLog.setOnClickListener(mClickListener);
+ btnStop.setOnClickListener(mClickListener);
+ radioProvider.setOnClickListener(mClickListener);
+ radioConsumer.setOnClickListener(mClickListener);
+
+ signUp.setOnClickListener(mClickListener);
+ signIn.setOnClickListener(mClickListener);
+ signOut.setOnClickListener(mClickListener);
+
+ remoteService.setOnClickListener(mClickListener);
+ subscribeMQ.setOnClickListener(mClickListener);
+
+ mProviderSample = new ProviderSample(getApplicationContext());
+ mProviderSample.setHandler(mHandler);
+
+ mNotiListener = new NotiListener(this);
+ Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
+ startActivity(intent);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+
+ public ProviderSample getProviderSample()
+ {
+ return mProviderSample;
+ }
+
+ Button.OnClickListener mClickListener = new View.OnClickListener() {
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.RadioProvider: {
+ if (isStarted == false) {
+ gAcceptor = true;
+ showToast("Provider as acceptor is " + gAcceptor);
+ }
+ else
+ showToast("Start ProviderService again to change acceptor as provider");
+ }
+ break;
+
+ case R.id.RadioConsumer: {
+ if (isStarted == false) {
+ gAcceptor = false;
+ showToast("Provider as acceptor is "+ gAcceptor);
+ }
+ else
+ showToast("Start ProviderService again to change acceptor as consumer");
+ }
+ break;
+
+ case R.id.BtnStart: {
+ if (isStarted == false) {
+ Log.i(TAG, "Start Provider Service");
+ TvLog.setText("Start Provider Service\n");
+ mProviderSample.Start(gAcceptor);
+ isStarted = true;
+ radioProvider.setEnabled(false);
+ radioConsumer.setEnabled(false);
+ } else {
+ Log.e(TAG, " Provider Service had already started");
+ showToast(" Provider Service had already started");
+ }
+ }
+ break;
+
+ case R.id.BtnRegister: {
+ if (isStarted == false) {
+ Log.i(TAG, "Start Provider Service");
+ TvLog.append("Register Topic : OCF_TOPIC1\n");
+ TvLog.append("Register Topic : OCF_TOPIC2\n");
+ TvLog.append("Register Topic : OCF_TOPIC3\n");
+ TvLog.append("Register Topic : OCF_TOPIC4\n");
+ showToast("Start Provider Service First");
+ break;
+ }
+ mProviderSample.RegisterTopic();
+
+ }
+ break;
+
+ case R.id.BtnSet: {
+ if (isStarted == false) {
+ Log.i(TAG, "Start Provider Service");
+ TvLog.append("Set Topic : OCF_TOPIC1\n");
+ TvLog.append("Set Topic : OCF_TOPIC2\n");
+ TvLog.append("Set Topic : OCF_TOPIC3\n");
+ TvLog.append("Set Topic : OCF_TOPIC4\n");
+ showToast("Start Provider Service First");
+ break;
+ }
+ if(gAcceptor == false){
+ showToast("Operation Not Permitted: \nStart Provider Service with provider as acceptor");
+ break;
+ }
+ mProviderSample.SetTopic();
+
+ }
+ break;
+
+ case R.id.BtnCreateNoti: {
+
+ String id = Integer.toString(notiId); // generate notificaion ID
+ String title = editTextTitle.getText().toString();
+ String body = editTextBody.getText().toString();
+ String topic = editTextTopic.getText().toString();
+
+ if(isStarted == false)
+ {
+ Log.e(TAG, "Fail to send NSMessage");
+ showToast("Start ProviderService First");
+ break;
+ }
+
+ // Build android noti object and send it to Notification service receiver
+ Notification.Builder notiBuilder = new Notification.Builder(getApplicationContext());
+ notiBuilder.setContentTitle(title);
+ notiBuilder.setContentText(body);
+ notiBuilder.setPriority(Notification.PRIORITY_MAX);
+ notiBuilder.setDefaults(Notification.DEFAULT_ALL);
+ notiBuilder.setSmallIcon(R.mipmap.ic_launcher);
+ NotificationManager notiMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+ notiMgr.notify(notiId, notiBuilder.build());
+
+ Log.i(TAG, "#" + notiId + " notified ..");
+ TvLog.append("Send Notitication(Msg ID: " + notiId + ")\n");
+ notiId++;
+ }
+ break;
+
+ case R.id.BtnStop: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to stop service");
+ showToast("Already Stopped");
+ break;
+ }
+
+ mProviderSample.Stop();
+ isStarted = false;
+ radioProvider.setEnabled(true);
+ radioConsumer.setEnabled(true);
+ showToast("Stopped ProviderService"+ isStarted);
+ TvLog.append("Stop Provider Service\n");
+ }
+ break;
+
+ case R.id.BtnLog: {
+
+ TvLog.setText("");
+ }
+ break;
+ case R.id.signup: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Sign Up");
+ showToast("Start ProviderService First");
+ break;
+ }
+ TvLog.append("Initiating SignUp\n");
+ signUp();
+ }
+ break;
+ case R.id.signin: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Sign In");
+ showToast("Start ProviderService First");
+ break;
+ }
+ TvLog.append("Initiating SignIn\n");
+ signIn();
+ }
+ break;
+ case R.id.signout: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Sign out");
+ showToast("Start ProviderService First");
+ break;
+ }
+ TvLog.append("Initiating SignOut\n");
+ signOut();
+ }
+ break;
+ case R.id.remoteService: {
+ remoteService.setEnabled(false);
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to Enable/Disable RemoteService");
+ showToast("Start ProviderService First");
+ break;
+ }
+ if(gRemoteService){
+ TvLog.append("Enable Remote Service\n");
+ int result = mProviderSample.EnableRemoteService(RemoteAddress);
+ remoteService.setText(R.string.disableRemoteService);
+ gRemoteService = false;
+ remoteService.setEnabled(true);
+ TvLog.append("EnableRemoteService Result : " + result + "\n");
+ }
+ else {
+ TvLog.append("Disable Remote Service\n");
+ int result = mProviderSample.DisableRemoteService(RemoteAddress);
+ remoteService.setText(R.string.enableRemoteService);
+ gRemoteService = true;
+ remoteService.setEnabled(true);
+ TvLog.append("DisableRemoteService Result : " + result + "\n");
+ }
+ }
+ break;
+ case R.id.subscribeMQService: {
+ if(isStarted == false) {
+ Log.e(TAG, "Fail to SubscribeMQService");
+ showToast("Start ProviderService First");
+ break;
+ }
+ int result = mProviderSample.subscribeMQService(MQCloudAddress, MQCloudTopic);
+ TvLog.append("SubscribeMQService Result : " + result + "\n");
+ }
+ break;
+ }
+ }
+ };
+ public void logMessage(final String text) {
+ runOnUiThread(new Runnable() {
+ public void run() {
+ Message msg = new Message();
+ msg.obj = text;
+ TvLog.append(text + "\n");
+ }
+ });
+ Log.i(TAG, text);
+ }
+ OcAccountManager.OnPostListener onSignUp = new OcAccountManager.OnPostListener() {
+ @Override
+ public synchronized void onPostCompleted(List<OcHeaderOption> list,
+ OcRepresentation ocRepresentation) {
+ logMessage("signUp was successful");
+ runOnUiThread(new Runnable() {
+ public void run() {
+ signIn.setEnabled(true);
+ signUp.setEnabled(false);
+ }
+ });
+ try {
+ mUserID = ocRepresentation.getValue("uid");
+ mAccessToken = ocRepresentation.getValue("accesstoken");
+ mRefreshtoken = ocRepresentation.getValue("refreshtoken");
+
+ logMessage("\tuserID: " + mUserID);
+ logMessage("\taccessToken: " + mAccessToken);
+ logMessage("\trefreshToken: " + mRefreshtoken);
+
+ if (ocRepresentation.hasAttribute("expiresin")) {
+ int expiresIn = ocRepresentation.getValue("expiresin");
+ logMessage("\texpiresIn: " + expiresIn);
+ }
+ } catch (OcException e) {
+ Log.e(TAG, e.toString());
+ }
+ }
+
+
+ @Override
+ public synchronized void onPostFailed(Throwable throwable) {
+ logMessage("Failed to signUp");
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ Log.e(TAG, ocEx.toString());
+ ErrorCode errCode = ocEx.getErrorCode();
+ logMessage("Error code: " + errCode);
+ }
+ }
+ };
+ OcAccountManager.OnPostListener onSignIn = new OcAccountManager.OnPostListener() {
+ @Override
+ public synchronized void onPostCompleted(List<OcHeaderOption> list,
+ OcRepresentation ocRepresentation) {
+ logMessage("signIn was successful");
+ runOnUiThread(new Runnable() {
+ public void run() {
+ signIn.setEnabled(false);
+ signOut.setEnabled(true);
+ remoteService.setEnabled(true);
+ }
+ });
+
+ }
+
+ @Override
+ public synchronized void onPostFailed(Throwable throwable) {
+ logMessage("Failed to signIn");
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ Log.e(TAG, ocEx.toString());
+ ErrorCode errCode = ocEx.getErrorCode();
+ logMessage("Error code: " + errCode);
+ if (ErrorCode.UNAUTHORIZED_REQ != errCode) {
+ RefreshToken();
+ }
+ }
+ }
+ };
+ OcAccountManager.OnPostListener onSignOut = new OcAccountManager.OnPostListener() {
+ @Override
+ public synchronized void onPostCompleted(List<OcHeaderOption> list,
+ OcRepresentation ocRepresentation) {
+ logMessage("signOut was successful");
+ runOnUiThread(new Runnable() {
+ public void run() {
+ signIn.setEnabled(true);
+ signOut.setEnabled(false);
+ remoteService.setEnabled(false);
+ }
+ });
+
+ }
+
+ @Override
+ public synchronized void onPostFailed(Throwable throwable) {
+ logMessage("Failed to signOut");
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ Log.e(TAG, ocEx.toString());
+ ErrorCode errCode = ocEx.getErrorCode();
+ logMessage("Error code: " + errCode);
+ if (ErrorCode.UNAUTHORIZED_REQ != errCode) {
+ RefreshToken();
+ }
+ }
+ }
+ };
+ @Override
+ public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation ocRepresentation) {
+
+ }
+
+ @Override
+ public void onPostFailed(Throwable throwable) {
+
+ }
+ private void signIn() {
+ try {
+ if(mAccountManager==null)
+ {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ }
+
+ mAccountManager.signIn(mUserID, mAccessToken, onSignIn);
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void signOut() {
+ try {
+ logMessage("signOut");
+ if(mAccountManager==null)
+ {
+ try {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+ mAccountManager.signOut(mAccessToken, onSignOut);
+ signIn.setEnabled(false);
+ signUp.setEnabled(true);
+ remoteService.setEnabled(false);
+ logMessage("signOut Successful");
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void signUp() {
+ try {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+
+ Intent intentLogin = new Intent(this, LoginActivity.class);
+ startActivityForResult(intentLogin, REQUEST_LOGIN);
+ }
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) {
+ mAuthCode = data.getStringExtra("authCode");
+ mAuthProvider = data.getStringExtra("authProvider");
+ logMessage("authCode: " + mAuthCode);
+ logMessage("authProvider: " + mAuthProvider);
+
+ try {
+ mAccountManager = OcPlatform.constructAccountManagerObject(CIServer,
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP));
+ logMessage("Calling signup API");
+
+ mAccountManager.signUp(mAuthProvider, mAuthCode, onSignUp);
+ } catch (OcException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ OcResource.OnPostListener onRefreshTokenPost = new OcResource.OnPostListener() {
+ @Override
+ public void onPostCompleted(List<OcHeaderOption> list, OcRepresentation ocRepresentation) {
+ logMessage("RefreshToken Completed.");
+ try {
+ mAccessToken = ocRepresentation.getValue("accesstoken");
+ mRefreshtoken = ocRepresentation.getValue("refreshtoken");
+ }
+ catch (OcException e)
+ {
+ e.printStackTrace();
+ }
+ signIn();
+ }
+
+ @Override
+ public void onPostFailed(Throwable throwable) {
+ logMessage("RefreshToken failed.");
+ Log.d(TAG, "onRefreshTokenPost failed.");
+ }
+ };
+ public void RefreshToken() {
+ try {
+ OcResource authResource = OcPlatform.constructResourceObject(CIServer, "/.well-known/ocf/account/tokenrefresh",
+ EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP, OcConnectivityType.CT_IP_USE_V4),
+ false, Arrays.asList("oic.wk.account"), Arrays.asList(OcPlatform.DEFAULT_INTERFACE));
+ OcRepresentation rep = new OcRepresentation();
+
+ showToast("RefreshToken in progress..");
+ logMessage("RefreshToken in progress..");
+ rep.setValue("di", deviceID);
+ rep.setValue("granttype", "refresh_token");
+ rep.setValue("refreshtoken", mRefreshtoken);
+ rep.setValue("uid", mUserID);
+ authResource.post(rep, new HashMap<String, String>(), onRefreshTokenPost);
+ }
+ catch(OcException e)
+ {
+ e.printStackTrace();
+ }
+
+ Log.d(TAG, "No error while executing login");
+ }
+}
+
-/*\r
-//******************************************************************\r
-//\r
-// Copyright 2016 Samsung Electronics All Rights Reserved.\r
-//\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-//\r
-// Licensed under the Apache License, Version 2.0 (the "License");\r
-// you may not use this file except in compliance with the License.\r
-// You may obtain a copy of the License at\r
-//\r
-// http://www.apache.org/licenses/LICENSE-2.0\r
-//\r
-// Unless required by applicable law or agreed to in writing, software\r
-// distributed under the License is distributed on an "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-// See the License for the specific language governing permissions and\r
-// limitations under the License.\r
-//\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- */\r
-\r
-package com.sec.notiproviderexample;\r
-\r
-import android.app.Notification;\r
-import android.os.Bundle;\r
-import android.service.notification.NotificationListenerService;\r
-import android.service.notification.StatusBarNotification;\r
-import android.util.Log;\r
-import org.iotivity.service.ns.common.MediaContents;\r
-import org.iotivity.service.ns.common.Message;\r
-import java.util.ArrayList;\r
-\r
-public class NotiListener extends NotificationListenerService {\r
-\r
- private final String TAG = "NS_JNI_NOTI_LISTENER";\r
- private static ProviderSample mProviderSample = null;\r
- private MainActivity mActivity = null;\r
- ArrayList mBlackSourceList = new ArrayList<String>();\r
-\r
- public NotiListener() {\r
-\r
- Log.i(TAG, "Create NotiListener");\r
- }\r
-\r
- public NotiListener(MainActivity activity) {\r
-\r
- Log.i(TAG, "Create NotiListener with MainActivity");\r
-\r
- this.mActivity = activity;\r
- this.mProviderSample = mActivity.getProviderSample();\r
-\r
- setBlackSourceList();\r
-\r
- if(mProviderSample == null) {\r
- Log.i(TAG, "Fail to get providerProxy instance");\r
- }\r
- }\r
-\r
- public void setBlackSourceList() {\r
-\r
- // set blacklist of app package name not to receive notification\r
- mBlackSourceList.add("android");\r
- mBlackSourceList.add("com.android.systemui");\r
- }\r
-\r
- @Override\r
- public void onNotificationPosted(StatusBarNotification sbn) {\r
- super.onNotificationPosted(sbn);\r
-\r
- Bundle bundle = sbn.getNotification().extras;\r
- String source = null;\r
-\r
- // prevent not to send notification\r
- for(int i = 0; i < mBlackSourceList.size(); ++i)\r
- {\r
- if (sbn.getPackageName().equals(mBlackSourceList.get(i)))\r
- {\r
- return;\r
- }\r
- }\r
-\r
- // filter exception case : Some notification are generated twice\r
- if(sbn.getId() > 10000 || sbn.getId() < 0)\r
- return;\r
-\r
- // Temporary protocol code to display ICON on consumer app.\r
- // For example, consumer app shows KAKAOTALK Icon when receiving Notification with SOURCE\r
- // that is set to KAKAO, otherwise it displays OCF Icon on current sample app.\r
- if(sbn.getPackageName().equals("com.kakao.talk"))\r
- source = "KAKAO";\r
- else\r
- source = "OCF";\r
-\r
- Log.i(TAG, "Noti. Package Name : " + sbn.getPackageName());\r
- Log.i(TAG, "Noti. ID : " + sbn.getId());\r
-\r
- String id = Integer.toString(sbn.getId());\r
- String title = bundle.getString(Notification.EXTRA_TITLE, "");\r
- String body = bundle.getString(Notification.EXTRA_TEXT, "");\r
-\r
- Log.i(TAG, "onNotificationPosted .. ");\r
- Log.i(TAG, "source : " + source);\r
- Log.i(TAG, "Id : " + id);\r
- Log.i(TAG, "Title : " + title);\r
- Log.i(TAG, "Body : " + body);\r
-\r
- Message notiMessage = new Message(title,body,source);\r
- notiMessage.setTTL(10);\r
- notiMessage.setTime("12:10");\r
- MediaContents media = new MediaContents("daasd");\r
- notiMessage.setMediaContents(media);\r
- if (mProviderSample != null) {\r
- mProviderSample.SendMessage(notiMessage);\r
- } else {\r
- Log.i(TAG, "providerExample is NULL");\r
- }\r
- }\r
-\r
- @Override\r
- public void onNotificationRemoved(StatusBarNotification sbn) {\r
- super.onNotificationRemoved(sbn);\r
-\r
- Bundle bundle = sbn.getNotification().extras;\r
-\r
- if (sbn.getPackageName().equals("android"))\r
- return;\r
-\r
- Log.i(TAG, "Noti. Package Name : " + sbn.getPackageName());\r
- Log.i(TAG, "Noti. ID : " + sbn.getId());\r
-\r
- if(mProviderSample.getMsgMap().containsKey(sbn.getId()))\r
- {\r
- if(mProviderSample.getMsgMap().get(sbn.getId()) == 2)\r
- {\r
- org.iotivity.service.ns.common.SyncInfo.SyncType type = org.iotivity.service.ns.common.SyncInfo.SyncType.READ;\r
- mProviderSample.SendSyncInfo(1,type);\r
- }\r
- }\r
- }\r
-}\r
+/*
+//******************************************************************
+//
+// Copyright 2016 Samsung Electronics All Rights Reserved.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ */
+
+package org.iotivity.service.ns.sample.provider;
+
+import android.app.Notification;
+import android.os.Bundle;
+import android.service.notification.NotificationListenerService;
+import android.service.notification.StatusBarNotification;
+import android.util.Log;
+import org.iotivity.service.ns.common.MediaContents;
+import org.iotivity.service.ns.common.Message;
+import java.util.ArrayList;
+
+public class NotiListener extends NotificationListenerService {
+
+ private final String TAG = "NS_JNI_NOTI_LISTENER";
+ private static ProviderSample mProviderSample = null;
+ private MainActivity mActivity = null;
+ ArrayList mBlackSourceList = new ArrayList<String>();
+
+ public NotiListener() {
+
+ Log.i(TAG, "Create NotiListener");
+ }
+
+ public NotiListener(MainActivity activity) {
+
+ Log.i(TAG, "Create NotiListener with MainActivity");
+
+ this.mActivity = activity;
+ this.mProviderSample = mActivity.getProviderSample();
+
+ setBlackSourceList();
+
+ if(mProviderSample == null) {
+ Log.i(TAG, "Fail to get providerProxy instance");
+ }
+ }
+
+ public void setBlackSourceList() {
+
+ // set blacklist of app package name not to receive notification
+ mBlackSourceList.add("android");
+ mBlackSourceList.add("com.android.systemui");
+ }
+
+ @Override
+ public void onNotificationPosted(StatusBarNotification sbn) {
+ super.onNotificationPosted(sbn);
+
+ Bundle bundle = sbn.getNotification().extras;
+ String source = null;
+
+ // prevent not to send notification
+ for(int i = 0; i < mBlackSourceList.size(); ++i)
+ {
+ if (sbn.getPackageName().equals(mBlackSourceList.get(i)))
+ {
+ return;
+ }
+ }
+
+ // filter exception case : Some notification are generated twice
+ if(sbn.getId() > 10000 || sbn.getId() < 0)
+ return;
+
+ // Temporary protocol code to display ICON on consumer app.
+ // For example, consumer app shows KAKAOTALK Icon when receiving Notification with SOURCE
+ // that is set to KAKAO, otherwise it displays OCF Icon on current sample app.
+ if(sbn.getPackageName().equals("com.kakao.talk"))
+ source = "KAKAO";
+ else
+ source = "OCF";
+
+ Log.i(TAG, "Noti. Package Name : " + sbn.getPackageName());
+ Log.i(TAG, "Noti. ID : " + sbn.getId());
+
+ String id = Integer.toString(sbn.getId());
+ String title = bundle.getString(Notification.EXTRA_TITLE, "");
+ String body = bundle.getString(Notification.EXTRA_TEXT, "");
+
+ Log.i(TAG, "onNotificationPosted .. ");
+ Log.i(TAG, "source : " + source);
+ Log.i(TAG, "Id : " + id);
+ Log.i(TAG, "Title : " + title);
+ Log.i(TAG, "Body : " + body);
+
+ Message notiMessage = new Message(title,body,source);
+ notiMessage.setTTL(10);
+ notiMessage.setTime("12:10");
+ MediaContents media = new MediaContents("daasd");
+ notiMessage.setMediaContents(media);
+ if (mProviderSample != null) {
+ mProviderSample.SendMessage(notiMessage);
+ } else {
+ Log.i(TAG, "providerExample is NULL");
+ }
+ }
+
+ @Override
+ public void onNotificationRemoved(StatusBarNotification sbn) {
+ super.onNotificationRemoved(sbn);
+
+ Bundle bundle = sbn.getNotification().extras;
+
+ if (sbn.getPackageName().equals("android"))
+ return;
+
+ Log.i(TAG, "Noti. Package Name : " + sbn.getPackageName());
+ Log.i(TAG, "Noti. ID : " + sbn.getId());
+
+ if(mProviderSample.getMsgMap().containsKey(sbn.getId()))
+ {
+ if(mProviderSample.getMsgMap().get(sbn.getId()) == 2)
+ {
+ org.iotivity.service.ns.common.SyncInfo.SyncType type = org.iotivity.service.ns.common.SyncInfo.SyncType.READ;
+ mProviderSample.SendSyncInfo(1,type);
+ }
+ }
+ }
+}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
*/
-package com.sec.notiproviderexample;
+package org.iotivity.service.ns.sample.provider;
import android.content.Context;
import android.os.*;
android:paddingLeft="@dimen/activity_horizontal_margin"\r
android:paddingRight="@dimen/activity_horizontal_margin"\r
android:paddingTop="@dimen/activity_vertical_margin"\r
- tools:context="com.sec.notificationexample.MainActivity">\r
+ tools:context=".MainActivity">\r
\r
<ScrollView\r
android:layout_width="match_parent"\r