1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.xwalk.core.internal.extension.api.messaging;
7 import android.app.Activity;
8 import android.content.ContentValues;
9 import android.content.Context;
10 import android.content.Intent;
11 import android.content.IntentFilter;
12 import android.database.Cursor;
13 import android.net.Uri;
14 import android.util.Log;
16 import java.util.Date;
17 import java.util.HashMap;
20 import org.json.JSONArray;
21 import org.json.JSONException;
22 import org.json.JSONObject;
23 import org.xwalk.core.internal.extension.api.messaging.MessagingManager;
24 import org.xwalk.core.internal.extension.api.messaging.MessagingSmsManager;
25 import org.xwalk.core.internal.extension.XWalkExtension;
26 import org.xwalk.core.internal.extension.XWalkExtensionContext;
29 void runCommand(int instanceID, JSONObject jsonMsg);
32 public class Messaging extends XWalkExtension {
33 public static final String NAME = "xwalk.experimental.messaging";
34 public static final String JS_API_PATH = "jsapi/messaging_api.js";
35 private static HashMap<String, Command> sMethodMap = new HashMap<String, Command>();
37 private MessagingSmsManager mSmsManager;
38 private MessagingManager mMessagingManager;
40 private void initMethodMap() {
41 sMethodMap.put("msg_smsSend", new Command() {
42 public void runCommand(int instanceID, JSONObject jsonMsg) {
43 mSmsManager.onSmsSend(instanceID, jsonMsg);
46 sMethodMap.put("msg_smsClear", new Command() {
47 public void runCommand(int instanceID, JSONObject jsonMsg) {
48 mSmsManager.onSmsClear(instanceID, jsonMsg);
51 sMethodMap.put("msg_smsSegmentInfo", new Command() {
52 public void runCommand(int instanceID, JSONObject jsonMsg) {
53 mSmsManager.onSmsSegmentInfo(instanceID, jsonMsg);
56 sMethodMap.put("msg_findMessages", new Command() {
57 public void runCommand(int instanceID, JSONObject jsonMsg) {
58 mMessagingManager.onMsgFindMessages(instanceID, jsonMsg);
61 sMethodMap.put("msg_getMessage", new Command() {
62 public void runCommand(int instanceID, JSONObject jsonMsg) {
63 mMessagingManager.onMsgGetMessage(instanceID, jsonMsg);
66 sMethodMap.put("msg_deleteMessage", new Command() {
67 public void runCommand(int instanceID, JSONObject jsonMsg) {
68 mMessagingManager.onMsgDeleteMessage(instanceID, jsonMsg);
71 sMethodMap.put("msg_deleteConversation", new Command() {
72 public void runCommand(int instanceID, JSONObject jsonMsg) {
73 mMessagingManager.onMsgDeleteConversation(instanceID, jsonMsg);
76 sMethodMap.put("msg_markMessageRead", new Command() {
77 public void runCommand(int instanceID, JSONObject jsonMsg) {
78 mMessagingManager.onMsgMarkMessageRead(instanceID, jsonMsg);
81 sMethodMap.put("msg_markConversationRead", new Command() {
82 public void runCommand(int instanceID, JSONObject jsonMsg) {
83 mMessagingManager.onMsgMarkConversationRead(instanceID, jsonMsg);
88 private String getCommandString(String message) {
89 if (message.isEmpty()) {
94 return new JSONObject(message).getString("cmd");
95 } catch(Exception e) {
101 public Messaging(String jsApiContent, XWalkExtensionContext context) {
102 super(NAME, jsApiContent, context);
103 mSmsManager = new MessagingSmsManager(mExtensionContext.getActivity(), this);
104 mSmsManager.registerIntentFilters();
105 //FIXME:(shawn) When onStart and OnStop are ready. This should be moved to onStart.
106 mMessagingManager = new MessagingManager(mExtensionContext.getActivity(), this);
112 public void onDestroy() {
113 mSmsManager.unregisterIntentFilters();
114 //FIXME:(shawn) When onStart and OnStop are ready. This should be moved to onStop.
118 public void onMessage(int instanceID, String message) {
119 Command command = sMethodMap.get(getCommandString(message));
121 if (null != command) {
123 command.runCommand(instanceID, new JSONObject(message));
124 } catch(Exception e) {
132 public String onSyncMessage(int instanceID, String message) {
133 if (getCommandString(message).equals("msg_smsServiceId")) {
134 return mSmsManager.getServiceIds();