b9abad09938eb6ee971cef1480babcc28e43a798
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / android / core_internal / src / org / xwalk / core / internal / extension / api / messaging / Messaging.java
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.
4
5 package org.xwalk.core.internal.extension.api.messaging;
6
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; 
15
16 import java.util.Date;
17 import java.util.HashMap;
18 import java.util.Map;
19
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;
27
28 interface Command {
29     void runCommand(int instanceID, JSONObject jsonMsg);
30 }
31
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>();
36
37     private MessagingSmsManager mSmsManager;
38     private MessagingManager mMessagingManager;
39
40     private void initMethodMap() {
41         sMethodMap.put("msg_smsSend", new Command() {
42             public void runCommand(int instanceID, JSONObject jsonMsg) {
43                 mSmsManager.onSmsSend(instanceID, jsonMsg); 
44             };
45         });
46         sMethodMap.put("msg_smsClear", new Command() {
47             public void runCommand(int instanceID, JSONObject jsonMsg) {
48                 mSmsManager.onSmsClear(instanceID, jsonMsg);
49             };
50         });
51         sMethodMap.put("msg_smsSegmentInfo", new Command() {
52             public void runCommand(int instanceID, JSONObject jsonMsg) {
53                 mSmsManager.onSmsSegmentInfo(instanceID, jsonMsg);
54             };
55         });
56         sMethodMap.put("msg_findMessages", new Command() {
57             public void runCommand(int instanceID, JSONObject jsonMsg) {
58                 mMessagingManager.onMsgFindMessages(instanceID, jsonMsg);
59             };
60         });
61         sMethodMap.put("msg_getMessage", new Command() {
62             public void runCommand(int instanceID, JSONObject jsonMsg) {
63                 mMessagingManager.onMsgGetMessage(instanceID, jsonMsg);
64             };
65         });
66         sMethodMap.put("msg_deleteMessage", new Command() {
67             public void runCommand(int instanceID, JSONObject jsonMsg) {
68                 mMessagingManager.onMsgDeleteMessage(instanceID, jsonMsg);
69             };
70         });
71         sMethodMap.put("msg_deleteConversation", new Command() {
72             public void runCommand(int instanceID, JSONObject jsonMsg) {
73                 mMessagingManager.onMsgDeleteConversation(instanceID, jsonMsg);
74             };
75         });
76         sMethodMap.put("msg_markMessageRead", new Command() {
77             public void runCommand(int instanceID, JSONObject jsonMsg) {
78                 mMessagingManager.onMsgMarkMessageRead(instanceID, jsonMsg);
79             };
80         });
81         sMethodMap.put("msg_markConversationRead", new Command() {
82             public void runCommand(int instanceID, JSONObject jsonMsg) {
83                 mMessagingManager.onMsgMarkConversationRead(instanceID, jsonMsg);
84             };
85         });
86     }
87
88     private String getCommandString(String message) {
89         if (message.isEmpty()) {
90             return "";
91         }
92
93         try {
94             return new JSONObject(message).getString("cmd");
95         } catch(Exception e) {
96             e.printStackTrace();
97             return "";
98         }
99     }
100
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);
107
108         initMethodMap();
109     }
110
111     @Override
112     public void onDestroy() {
113         mSmsManager.unregisterIntentFilters();
114         //FIXME:(shawn) When onStart and OnStop are ready. This should be moved to onStop.
115     }
116
117     @Override
118     public void onMessage(int instanceID, String message) {
119         Command command = sMethodMap.get(getCommandString(message));
120
121         if (null != command) {
122             try {
123                 command.runCommand(instanceID, new JSONObject(message));
124             } catch(Exception e) {
125                 e.printStackTrace();
126                 return;
127             }
128         }
129     }
130
131     @Override
132     public String onSyncMessage(int instanceID, String message) {
133         if (getCommandString(message).equals("msg_smsServiceId")) {
134             return mSmsManager.getServiceIds();
135         }
136         return "";
137     }
138 }