nes-num lines-num-new"> 13
</div>
14
</body>
15
</html>

+ 54 - 77
superapp-client/app/src/main/assets/mobile-action.xml

@ -1,13 +1,14 @@
1 1
<?xml version="1.0" encoding="UTF-8"?>
2 2
<actions>
3
    <action name="openIpuApp" class="com.ai.ipu.func.MobileOpenApp" method="openIpuApp"/>
4
    <action name="closeIpuApp" class="com.ai.ipu.func.MobileOpenApp" method="closeIpuApp"/>
5
    <action name="openNativeApp" class="com.ai.ipu.func.MobileOpenApp" method="openNativeApp"></action>
6
    <action name="initAppConfig" class="com.ai.ipu.func.MobileOpenApp" method="initAppConfig"></action>
7
    <action name="reLogin" class="com.ai.ipu.func.MobileOpenApp" method="reLogin"/>
8
    <action name="openRemoteURL" class="com.ai.ipu.func.MobileOpenApp" method="openRemoteURL"/>
9
    <action name="closeAllSubApp" class="com.ai.ipu.func.MobileOpenApp" method="closeAllSubApp"/>
10
	<action name="backWithAppID" class="com.ai.ipu.func.MobileOpenApp" method="backWithAppID"></action>
3
	<!--OpenApp-->
4
    <action name="openIpuApp" class="com.ai.ipu.sa.func.MobileOpenApp" method="openIpuApp"/>
5
    <action name="openNativeApp" class="com.ai.ipu.sa.func.MobileOpenApp" method="openNativeApp"></action>
6
    <action name="initAppConfig" class="com.ai.ipu.sa.func.MobileOpenApp" method="initAppConfig"></action>
7
    <action name="reLogin" class="com.ai.ipu.sa.func.MobileOpenApp" method="reLogin"/>
8
    <action name="openRemoteURL" class="com.ai.ipu.sa.func.MobileOpenApp" method="openRemoteURL"/>
9
	<action name="openNative" class="com.ai.ipu.sa.func.MobileOpenApp" method="openNative"></action>
10
	<action name="closeIpuApp" class="com.ai.ipu.sa.func.MobileOpenApp" method="closeIpuApp"></action>
11
11 12
    <!-- MobileBasic -->
12 13
	<action name="call" class="com.ai.ipu.mobile.plugin.MobileBasic" method="call"/>
13 14
	<action name="beep" class="com.ai.ipu.mobile.plugin.MobileBasic" method="beep"/>
@ -23,9 +24,9 @@
23 24
	<action name="httpRequest" class="com.ai.ipu.mobile.plugin.MobileNetWork" method="httpRequest"/>
24 25
	<action name="storageDataByThread" class="com.ai.ipu.mobile.plugin.MobileNetWork" method="storageDataByThread"/>
25 26
	<action name="httpDownloadFile" class="com.ai.ipu.mobile.plugin.MobileNetWork" method = "httpDownloadFile"/>
26
	<!-- 
27
27 28
	<action name="shareByBluetooth" class="com.ai.ipu.mobile.plugin.MobileNetWork" method="shareByBluetooth"></action>
28
	 -->
29
29 30
	<action name="setSmsListener" class="com.ai.ipu.mobile.plugin.MobileNetWork" method="setSmsListener"></action>
30 31
	<action name="downloadWithServlet" class="com.ai.ipu.mobile.plugin.MobileNetWork" method="downloadWithServlet"></action>
31 32
	<action name="uploadWithServlet" class="com.ai.ipu.mobile.plugin.MobileNetWork" method="uploadWithServlet"></action>
@ -39,8 +40,8 @@
39 40
	<action name="tip" class="com.ai.ipu.mobile.plugin.MobileUI" method="tip"/>
40 41
    <action name="alert" class="com.ai.ipu.mobile.plugin.MobileUI" method="alert"/>
41 42
	<action name="loadUrl" class="com.ai.ipu.mobile.plugin.MobileUI" method="loadUrl"/>
42
	<action name="openUrl" class="com.ai.ipu.func.MobileOpenApp" method="openUrl"/>
43
	<action name="closeUrl" class="com.ai.ipu.func.MobileOpenApp" method="closeUrl"/>
43
	<action name="openUrl" class="com.ai.ipu.mobile.plugin.MobileUI" method="openUrl"/>
44
	<action name="closeUrl" class="com.ai.ipu.mobile.plugin.MobileUI" method="closeUrl" />
44 45
	<action name="openPage" class="com.ai.ipu.mobile.plugin.MobileUI" method="openPage"/>
45 46
	<action name="openTemplate" class="com.ai.ipu.mobile.plugin.MobileUI" method="openTemplate"/>
46 47
	<action name="loadPage" class="com.ai.ipu.mobile.plugin.MobileUI" method="loadPage"/>
@ -70,8 +71,8 @@
70 71
	<!-- MobileCamera -->
71 72
	<action name="getPhoto" class="com.ai.ipu.mobile.plugin.MobileCamera" method="getPhoto"/>
72 73
	<action name="getPicture" class="com.ai.ipu.mobile.plugin.MobileCamera" method="getPicture"/>
73
	<action name="transImageToBase64" class="com.ai.ipu.mobile.plugin.MobileCamera" method="transImageToBase64"/>
74
	<action name="compressImage" class="com.ai.ipu.mobile.plugin.MobileCamera" method="compressImage"/>
74
	<action name="getBase64Picture" class="com.ai.ipu.mobile.plugin.MobileCamera" method="getBase64Picture"/>
75
	<action name="getCompressPicture" class="com.ai.ipu.mobile.plugin.MobileCamera" method="getCompressPicture"/>
75 76
	
76 77
	<!-- MobileInfo -->
77 78
	<action name="getTerminalType" class="com.ai.ipu.mobile.plugin.MobileInfo" method="getTerminalType"/>
@ -81,10 +82,9 @@
81 82
	<action name="browserFile" class="com.ailk.mobile.client.func.SwitchActivity" method = "browserFile"/>
82 83
	<action name="openDisplayPage" class="com.ailk.mobile.client.func.SwitchActivity" method = "openDisplayPage"/>
83 84
	<!-- MobileMap -->
84
	
85 85
	<action name="location" class="com.ai.ipu.map.func.MobileMap" method="location"></action>
86
	 <action name="markMap" class="com.ai.ipu.map.func.MobileMap" method="markMap"></action>
87
	 <action name="selectLocation" class="com.ai.ipu.map.func.MobileMap" method="selectLocation"></action> 
86
	<action name="markMap" class="com.ai.ipu.map.func.MobileMap" method="markMap"></action>
87
	<action name="selectLocation" class="com.ai.ipu.map.func.MobileMap" method="selectLocation"></action> 
88 88
	 
89 89
	<!-- MobileStorage -->
90 90
	<action name="removeMemoryCache" class="com.ai.ipu.mobile.plugin.MobileStorage" method="removeMemoryCache"></action>
@ -101,6 +101,7 @@
101 101
	<action name="readFile" class="com.ai.ipu.mobile.plugin.MobileFile" method="readFile"></action>
102 102
	<action name="openFile" class="com.ai.ipu.mobile.plugin.MobileFile" method="openFile"></action>
103 103
	<action name="deleteFile" class="com.ai.ipu.mobile.plugin.MobileFile" method="deleteFile"></action>
104
	<action name="openFile" class="com.ai.ipu.mobile.plugin.MobileFile" method="openFile"/>
104 105
	<action name="getAllFile" class="com.ai.ipu.mobile.plugin.MobileFile" method="getAllFile" />
105 106
	<action name="cleanResource" class="com.ai.ipu.mobile.plugin.MobileFile" method="cleanResource" />
106 107
	<action name="getRelativePath" class="com.ai.ipu.mobile.plugin.MobileFile" method="getRelativePath"/>
@ -128,10 +129,10 @@
128 129
	<action name="unregisterForPush" class="com.ai.mobile.im.func.MobilePush" method="unregisterForPush"></action>
129 130
	<action name="sendText" class="com.ai.mobile.im.func.MobilePush" method="sendText"></action>
130 131
	<action name="setCallbackForPush" class="com.ai.mobile.im.func.MobilePush" method="setCallbackForPush"></action>
131
	<action name="registerForPushWithYunba"    class="com.ai.ipu.ybpush.IpuPushPlugin" method="registerForPush"></action>
132
	<action name="unregisterForPushWithYunba"  class="com.ai.ipu.ybpush.IpuPushPlugin" method="unregisterForPush"></action>
133
	<action name="sendTextWithYunba"           class="com.ai.ipu.ybpush.IpuPushPlugin" method="sendText"></action>
134
	<action name="setCallbackForPushWithYunba" class="com.ai.ipu.ybpush.IpuPushPlugin" method="setCallbackForPush"></action>
132
	<action name="registerForPushWithYunba"    class="com.ai.ipu.push.IpuPushPlugin" method="registerForPush"></action>
133
	<action name="unregisterForPushWithYunba"  class="com.ai.ipu.push.IpuPushPlugin" method="unregisterForPush"></action>
134
	<action name="sendTextWithYunba"           class="com.ai.ipu.push.IpuPushPlugin" method="sendText"></action>
135
	<action name="setCallbackForPushWithYunba" class="com.ai.ipu.push.IpuPushPlugin" method="setCallbackForPush"></action>
135 136
	<action name="registerForPushWithJpush"    class="com.ai.ipu.push.func.IpuJPushPlugin" method="registerForPush"></action>
136 137
	<action name="unregisterForPushWithJpush"  class="com.ai.ipu.push.func.IpuJPushPlugin" method="unregisterForPush"></action>
137 138
	<action name="setJpushAlias" class="com.ai.ipu.push.func.IpuJPushPlugin" method="setAlias"></action>
@ -148,26 +149,17 @@
148 149
	<action name="getScreenLockState" class="com.ai.ipu.mobile.plugin.MobileScreenLock" method="getScreenLockState"></action>
149 150
	<action name="screenUnlock" class="com.ai.ipu.mobile.plugin.MobileScreenLock" method="screenUnlock"></action>
150 151
151
    <!--OpenApp-->
152
	<action name="openNative" class="com.ai.ipu.func.MobileOpenApp" method="openNative"></action>
153
	
154 152
	<!--ScanQR -->
155
 	<action name="scanQrCode" class="com.ai.ipu.scan.func.IpuScan" method="scanSingle"></action>
153
	<action name="scanQrCode" class="com.ai.ipu.scan.func.IpuScan" method="scanSingle"></action>
156 154
	<action name="scanSingle" class="com.ai.ipu.scan.func.IpuScan" method="scanSingle"></action>
157 155
	<action name="scanMultiple" class="com.ai.ipu.scan.func.IpuScan" method="scanMultiple"></action>
158 156
	<action name="createQrCode" class="com.ai.ipu.scan.func.IpuScan" method="createQrCode"></action>
159
160
	<!--<action name="scanQrCode" class="com.ai.ipu.scan.func.IpuScan" method="scanSingle"></action>-->
161
	<!--<action name="scanSingle" class="com.ai.ipu.scan.func.IpuScan" method="scanSingle" localFilePath="dynapk/ipuscan/ipu-scan.apk"></action>-->
162
	<!--<action name="scanMultiple" class="com.ai.ipu.scan.func.IpuScan" method="scanMultiple" localFilePath="dynapk/ipuscan/ipu-scan.apk"></action>-->
163
	<!--<action name="createQrCode" class="com.ai.ipu.scan.func.IpuScan" method="createQrCode" localFilePath="dynapk/ipuscan/ipu-scan.apk"></action>-->
164
	
165 157
	<!-- Voice -->
166 158
	<action name="startListen" class="com.ai.ipu.voice.IpuVoicePlugin" method="startListen"></action>
167 159
	<action name="voiceSpeak" class="com.ai.ipu.voice.IpuVoicePlugin" method="voiceSpeak"></action>
168 160
	
169 161
	<!-- BlutTooth -->
170
	<action name="shareByBluetooth" class="com.ai.ipu.bluetooth.func.MobileNetWork" method="shareByBluetooth"></action>
162
	<!--<action name="shareByBluetooth" class="com.ai.ipu.bluetooth.func.MobileNetWork" method="shareByBluetooth"></action>-->
171 163
	
172 164
	<!-- Share -->
173 165
	<action name="shareTextQQFriend" class="com.ai.ipu.share.func.MobileShareByApp" method="shareTextQQFriend"></action>	
@ -176,68 +168,53 @@
176 168
	<action name="shareFileWeChatFriend" class="com.ai.ipu.share.func.MobileShareByApp" method="shareFileWeChatFriend"></action>
177 169
	<action name="shareTextMore" class="com.ai.ipu.share.func.MobileShareByApp" method="shareTextMore"></action>
178 170
	<action name="shareFileMore" class="com.ai.ipu.share.func.MobileShareByApp" method="shareFileMore"></action>
179
	<action name="shareWebpageWechatTimeline" class="com.ai.ipu.share.func.MobileShareByWx" method="shareWebpageWechatTimeline" />
180
	<action name="shareWebpageWechatFriend" class="com.ai.ipu.share.func.MobileShareByWx" method="shareWebpageWechatFriend" />
181 171
172
	<!-- 图片本地缓存 -->
173
	<action name="setImageWithURL" class="com.ai.ipu.mobile.plugin.ImageCache" method="setImageWithURL"></action>
174
	<action name="setImageWithURLs" class="com.ai.ipu.mobile.plugin.ImageCache" method="setImageWithURLs"></action>
175
	<action name="clearImageCache" class="com.ai.ipu.mobile.plugin.ImageCache" method="clearImageCache"></action>
176
	
182 177
	<!-- Sweet控件 -->
183
	<action name="sweetAlert" class="com.ai.ipu.ui.dialog.func.MobileUIWithSAD" method="sweetAlert"/>
184
	<action name="sweetConfirm" class="com.ai.ipu.ui.dialog.func.MobileUIWithSAD" method="sweetConfirm"/>
185
	<action name="sweetLoading" class="com.ai.ipu.ui.dialog.func.MobileUIWithSAD" method="sweetLoading"/>
178
	<!-- <action name="sweetAlert" class="com.ai.ipu.alertdialog.func.MobileUIWithSAD" method="sweetAlert"/>
179
	<action name="sweetConfirm" class="com.ai.ipu.alertdialog.func.MobileUIWithSAD" method="sweetConfirm"/>
180
	<action name="sweetLoading" class="com.ai.ipu.alertdialog.func.MobileUIWithSAD" method="sweetLoading"/> -->
186 181
187 182
	<!-- 邮件 -->
188 183
	<action name="shareImageBymail" class="com.ai.ipu.mail.func.MailSendByApp" method="shareImageBymail"></action>	
189 184
	<!-- BaiduMap -->
190
	<action name="baiduLocation" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method="bdLocation" ></action>
191
	<action name="baiduMapLocation" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method="baiduMapLocation"></action>
192
	<action name="baiduMapPosition" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method = "baiduMapPosition"></action>
193
	<action name="clickBaiduMap" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method="clickBaiduMap"></action>
194
	<action name="addPolygon" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method="addPolygon"></action>
195
	<action name="poiCitySearch" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method="poiCitySearch"></action>
196
	<action name="poiNearbySearch" class="com.ai.ipu.dumap.bd.func.MobileBaiduMap" method="poiNearbySearch"></action>
197
	<action name="poiBoundsSearch" class="com.ai.ipu.map.bd.func.MobileBaiduMap" method="poiBoundsSearch"></action>
198
	<action name="lbsLocalSearch" class="com.ai.ipu.map.bd.func.MobileBaiduMap" method="lbsLocalSearch"></action>
199
	<action name="lbsNearbySearch" class="com.ai.ipu.map.bd.func.MobileBaiduMap" method="lbsNearbySearch"></action>
200
	<action name="lbsBoundsSearch" class="com.ai.ipu.map.bd.func.MobileBaiduMap" method="lbsBoundsSearch"></action>
201
	
202
	
185
	<action name="baiduLocation" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method="bdLocation" ></action>
186
	<action name="baiduMapLocation" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method="baiduMapLocation"></action>
187
	<action name="baiduMapPosition" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method = "baiduMapPosition"></action>
188
	<action name="clickBaiduMap" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method="clickBaiduMap"></action>
189
	<action name="addPolygon" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method="addPolygon"></action>
190
	<action name="poiCitySearch" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method="poiCitySearch"></action>
191
	<action name="poiNearbySearch" class="com.ai.ipu.baidudumap.func.MobileBaiduMap" method="poiNearbySearch"></action>
203 192
	<!-- 视频压缩 -->
204
	<action name="videoCompressor" class="com.ai.ipu.video.compress.func.MobileVideoCompress" method="videoCompressor"></action>
205
	<action name="getVideoPath" class="com.ai.ipu.video.compress.func.MobileVideoCompress" method="getVideoPath"/>
206
	
193
	<action name="videoCompressor" class="com.ai.ipu.videocompressor.func.MobileVideoCompress" method="videoCompressor"></action>
194
	<action name="getVideoPath" class="com.ai.ipu.videocompressor.func.MobileVideoCompress" method="getVideoPath"/>
207 195
	
196
	<action name="poiBoundsSearch" class="com.ai.ipu.baidumap.func.MobileBaiduMap" method="poiBoundsSearch"></action>
197
	<action name="lbsLocalSearch" class="com.ai.ipu.baidumap.func.MobileBaiduMap" method="lbsLocalSearch"></action>
198
	<action name="lbsNearbySearch" class="com.ai.ipu.baidumap.func.MobileBaiduMap" method="lbsNearbySearch"></action>
199
	<action name="lbsBoundsSearch" class="com.ai.ipu.baidumap.func.MobileBaiduMap" method="lbsBoundsSearch"></action>
208 200
209 201
210
    <action name="openActivityFromPlugin" class="com.ai.ipu.func.MobileOpenApp" method="openActivityFromPlugin"></action>
202
    <action name="openActivityFromPlugin" class="com.ai.ipu.sa.func.MobileOpenApp" method="openActivityFromPlugin"></action>
211 203
    <!-- PathMenu -->
212 204
	<action name="openPathMenu" class="com.ai.ipu.ipu_pathmenu.func.MobilePathMenu" method="openPathMenu"></action>
213 205
	<action name="closePathMenu" class="com.ai.ipu.ipu_pathmenu.func.MobilePathMenu" method="closePathMenu"></action>
214 206
215 207
	<action name="clearBackStack" class="com.ai.ipu.mobile.plugin.MobileUI" method="clearBackStack"></action>
216
	<!-- 物理按键监听 -->
217
	<action name="setKeyDownFlag" class="com.ai.ipu.mobile.plugin.MobileUI" method="setKeyDownFlag"></action>
218
	<action name="cleanKeyDownFlag" class="com.ai.ipu.mobile.plugin.MobileUI" method="cleanKeyDownFlag"></action>
219
	
220
	<action name="setImageWithURL" class="com.ai.ipu.mobile.plugin.ImageCache" method="setImageWithURL"></action>
221
	<action name="setImageWithURLs" class="com.ai.ipu.mobile.plugin.ImageCache" method="setImageWithURLs"></action>
222
	<action name="clearImageCache" class="com.ai.ipu.mobile.plugin.ImageCache" method="clearImageCache"></action>
223
	<action name="saveImageToAlbum" class="com.ai.ipu.mobile.plugin.ImageCache" method="saveImageToAlbum"></action>
224
	
225 208
	<action name="getIdentifyPhoto" class="com.ai.ipu.ipucustomcamera.IpuCustomCamera" method="getIdentifyPhoto"/>
226
	<action name="openRN" class="com.ai.ipu.mobile.rn.func.OpenRnView" method="openRnActivity" />
227
	<!-- 打开外部app -->
228
	<action name="openOuterApp" class="com.ai.ipu.func.MobileOpenOuterApp" method="openOuterApp"/>
229
	
230
	<!-- 指纹解锁 -->
231
	<action name="isSupportFingerprintAuthentication" class="com.ai.ipu.mobile.common.fingerprint.FingerPrint" method="isSupportFingerprintAuthentication"/>
232
	<action name="fingerprintAuthentication" class="com.ai.ipu.mobile.common.fingerprint.FingerPrint" method="fingerprintAuthentication"/>
209
	<action name="openRN" class="com.ai.ipu.func.OpenRnView" method="openRnActivity" />
233 210
234
	<!-- 根据url下载文 -->
235
	<action name="downloadFile" class="com.ai.ipu.mobile.plugin.DownloadFile" method="downloadFile" />
236
	<!-- 超级客户端相关插件-->
237
	<action name="getCacheSize" class="com.ai.ipu.func.AppMenuSettingPlugin" method="getCacheSize"></action>
238
	<action name="clearCache" class="com.ai.ipu.func.AppMenuSettingPlugin" method="clearCache"></action>
239
	<action name="getAppVersion" class="com.ai.ipu.func.AppMenuSettingPlugin" method="getAppVersion"></action>
240
	<action name="changeTextSize" class="com.ai.ipu.func.AppMenuSettingPlugin" method="changeTextSize"></action>
211
    <!-- 超级客户端相关插件-->
212
    <action name="getCacheSize" class="com.ai.ipu.sa.func.AppMenuSettingPlugin" method="getCacheSize"></action>
213
    <action name="clearCache" class="com.ai.ipu.sa.func.AppMenuSettingPlugin" method="clearCache"></action>
214
    <action name="getAppVersion" class="com.ai.ipu.sa.func.AppMenuSettingPlugin" method="getAppVersion"></action>
215
    <action name="createQrCode" class="com.ai.ipu.scan.func.IpuScan" method="createQrCode"></action>
216
    <action name="changeTextSize" class="com.ai.ipu.sa.func.AppMenuSettingPlugin" method="changeTextSize"></action>
241 217
218
	<action name="sendDefine" class="com.ai.ipu.sa.func.CountInfoPlugin" method="sendDefine"/>
242 219
243 220
</actions>

+ 38 - 0
superapp-client/superappclient/src/main/assets/mobile-config.xml

@ -0,0 +1,38 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<configs>
3
    <!-- 请求主机名或请求地址。包括服务器的ip地址和端口 -->
4
<!--	<config name="request_host" value="http://www.aiipu.com:8083"/>-->
5
    <config name="request_host" value="http://121.42.183.206:9010" />
6
	<!-- <config name="request_host" value="http://10.13.10.57:8080"/> -->
7
	<!-- 必须。10.0.2.2为Android模拟器的保留ip地址。访问到本机电脑时使用 -->
8
	<!-- <config name="request_host" value="http://10.0.2.2:8080"/> -->
9
	<!-- 必须。容器应用名或请求根路径 -->
10
<!--	<config name="request_path" value="/superapp"/>-->
11
    <config name="request_path" value="/mobile" />
12
	<!-- 必须。数据接口的servlet路径 -->
13
	<config name="request_servlet" value="/mobiledata"/>
14
	<!-- 非必须,默认应用名。sd卡上的应用根目录名字,解决应用中文名的问题 -->
15
	<config name="app_path" value="superapp-ln"/>
16
	<!-- 非必须,默认UTF-8。 应用需要用到的编码 -->
17
	<config name="encode" value="UTF-8"/>
18
	<!-- 必须。应用license --><!-- 永久license -->
19
	<config name="license" value="AJLSTH-ExS92ghtmoQtdA8R5vHkrMgG3vd3m4LNLiFiKrMuRX0RYIALp79gY3Zpg6v4DweKjnCf49STGgVqgsAsdLPOmV7d3rAQlVpnnzOtcnas-Uni7dfd1V6ssJ/Fomh0KNKC-nmsMLpT63ESaU2-2XzTD-XzGujQO-LzbyAVM|@@MDA5RkMzMzE5RUU0QzVBQTA5MDdCQ0QxMDJBNTNCQjczNzI2RTY2RjRGOTBDMTI4MTMzMzMwNTQwRDFDMDAwQTkxNjZBMUVCMTAyOTJBMEEzM0MyNDlEOEI2OTc4RUVFNjBDMTJDMkM1RkM5ODgzOTY1RTFEQUNCRkY3NzNGRkE2RDhCNzEwRTJFQUVEMUI4QTlFREQzQ0NFNTk0QTc3OUZFNTMyQTZGNDI0OUFENzc4QjA2RTE4QkNCMTBGRTBGOTM4RENGMDM0Njk3N0Q1Q0VFOTNGOENGNDM3RDFEMzZBMDQ0Njk4MDhGODlENTA5NDkwMzEwQjIxRkYzOEQyREQ5" ></config>
20
	<!-- 非必须。进入应用时的欢迎页面 --><!-- file:///android_asset为固定写法,表示工程的asset目录 -->
21
	<config name="loading_page" value="file:///android_asset/local/welcome.html"/>
22
	<!-- 非必须。更新应用的url -->
23
	<config name="update_url" value="http://www.aiipu.com:8083/download/android/superapp-client.apk"/>
24
25
	<!-- 插件管理平台 -->
26
	<config name="plugin_manager_url" value="http://www.aiipu.com/plugin-mgmt"/>
27
28
	<!-- **********非常用属性*********** -->
29
	<!-- 开启硬件加速, true表示关闭 -->
30
	<config name="hardware_acceleration" value="false"/>
31
	<!-- 强制校验MD5的文件类型 -->
32
	<config name="check_md5_file" value=".js|.png"/>
33
    <!-- 修改字体 -->
34
    <config name="insertSnippet" value="true"/>
35
36
	<!-- RN页面动态调试开关,默认关闭 -->
37
	<config name="rn_dev_enable" value="true"/>
38
</configs>

superapp-client/app/src/main/assets/mobile-permission.xml → superapp-client/superappclient/src/main/assets/mobile-permission.xml


+ 63 - 0
superapp-client/superappclient/src/main/java/com/ai/ipu/sa/App.java

@ -0,0 +1,63 @@
1
package com.ai.ipu.sa;
2
3
import android.content.Context;
4
import android.content.Intent;
5
import android.content.res.Configuration;
6
import android.util.Log;
7
8
import com.ai.ipu.mobile.dynamic.app.NativeMenuManager;
9
import com.ai.ipu.mobile.frame.IpuBasicApplication;
10
import com.qihoo360.mobilesafe.core.BuildConfig;
11
import com.qihoo360.replugin.RePlugin;
12
import com.qihoo360.replugin.RePluginCallbacks;
13
import com.qihoo360.replugin.RePluginConfig;
14
import com.qihoo360.replugin.RePluginEventCallbacks;
15
16
/**
17
 * Created by Administrator on 2016/12/5.
18
 */
19
public class App extends IpuBasicApplication {
20
21
    @Override
22
    public void onCreate() {
23
        super.onCreate();
24
        RePlugin.App.onCreate();
25
        NativeMenuManager.initPluginManager(this);
26
    }
27
28
    @Override
29
    protected void attachBaseContext(Context base) {
30
        super.attachBaseContext(base);
31
        RePlugin.App.attachBaseContext(this);
32
    }
33
34
    @Override
35
    public void onLowMemory() {
36
        super.onLowMemory();
37
        RePlugin.App.onLowMemory();
38
    }
39
40
    @Override
41
    public void onTrimMemory(int level) {
42
        super.onTrimMemory(level);
43
        RePlugin.App.onTrimMemory(level);
44
    }
45
46
    @Override
47
    public void onConfigurationChanged(Configuration newConfig) {
48
        super.onConfigurationChanged(newConfig);
49
        RePlugin.App.onConfigurationChanged(newConfig);
50
    }
51
52
    @Override
53
    public Context createConfigurationContext(Configuration overrideConfiguration) {
54
        return super.createConfigurationContext(overrideConfiguration);
55
    }
56
57
    protected RePluginConfig createConfig() {
58
        RePluginConfig c = new RePluginConfig();
59
        // FIXME RePlugin默认会对安装的外置插件进行签名校验,这里先关掉,避免调试时出现签名错误
60
        c.setVerifySign(!BuildConfig.DEBUG);
61
        return new RePluginConfig();
62
    }
63
}

+ 5 - 21
superapp-client/app/src/main/java/com/ai/ipu/BrowserActivity.java

@ -1,22 +1,12 @@
1
package com.ai.ipu;
1
package com.ai.ipu.sa;
2 2
3
import android.os.Bundle;
4
import android.text.TextUtils;
5
import android.widget.Toast;
6
7
import com.ai.ipu.func.SubAppStack;
8 3
import com.ai.ipu.mobile.frame.activity.NetMobileActivity;
9 4
5
import android.text.TextUtils;
6
import android.widget.Toast;
10 7
11
public class BrowserActivity extends NetMobileActivity {
12
13
	@Override
14
	public void onCreate(Bundle savedInstanceState) {
15
		super.onCreate(savedInstanceState);
16
		String remote_url = getIntent().getStringExtra("remote_url");
17
		SubAppStack.getInstance().push(remote_url,this);
18
	}
19
8
public class BrowserActivity extends NetMobileActivity{
9
	
20 10
	protected void loadHomePage() {
21 11
		if (getIntent() != null) {
22 12
			String remote_url = getIntent().getStringExtra("remote_url");
@ -36,10 +26,4 @@ public class BrowserActivity extends NetMobileActivity {
36 26
		finish();
37 27
	}
38 28
39
40
	@Override
41
	protected void onDestroy() {
42
		super.onDestroy();
43
		SubAppStack.getInstance().pop();
44
	}
45 29
}

+ 7 - 7
superapp-client/app/src/main/java/com/ai/ipu/MainActivity.java

@ -1,4 +1,5 @@
1
package com.ai.ipu;
1
package com.ai.ipu.sa;
2
2 3
import android.os.Build;
3 4
import android.os.Bundle;
4 5
import android.view.View;
@ -16,10 +17,12 @@ import com.ai.ipu.mobile.ui.view.FlipperLayout;
16 17
import com.ai.ipu.mobile.util.Constant.LoadingDialogStyle;
17 18
import com.ai.ipu.mobile.util.Messages;
18 19
19
20 20
public class MainActivity extends TemplateMainActivity {
21 21
	@Override
22 22
	public void onCreate(Bundle savedInstanceState) {
23
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
24
			WebView.setWebContentsDebuggingEnabled(true);
25
		}
23 26
		ApplicationManager.initApplication(getApplication());
24 27
		if(AppInfoUtil.getOsVersionNumber() > 8){
25 28
			setTheme(android.R.style.Theme_Holo_Light_NoActionBar);
@ -40,10 +43,6 @@ public class MainActivity extends TemplateMainActivity {
40 43
		} else {
41 44
			super.onCreate(savedInstanceState);
42 45
		}
43
		//浏览器调试功能
44
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
45
			WebView.setWebContentsDebuggingEnabled(true);
46
		}
47 46
    }
48 47
	
49 48
	@Override
@ -61,7 +60,8 @@ public class MainActivity extends TemplateMainActivity {
61 60
				//指定server-config中配置的初始页为退出界面,或者新建一个标签(isExitPage)来存放退出动作
62 61
				String indexPage = ServerConfig.getInstance().getValue("indexPage");
63 62
				View curView = flipperLayout.getCurrView();
64
				if(flipperLayout.isCanBack() && null != curView && !indexPage.equals(curView.getTag().toString()) && !"Index".equals(curView.getTag().toString())){
63
				if(flipperLayout.isCanBack() && null != curView && !indexPage.equals(curView.getTag().toString()) && !"Home".equals(curView.getTag().toString())
64
					&& !"Index".equals(curView.getTag().toString())){
65 65
					flipperLayout.back();
66 66
				}else {
67 67
					getIpuMobileClient().shutdownByConfirm(Messages.CONFIRM_CLOSE);

+ 13 - 16
superapp-client/app/src/main/java/com/ai/ipu/SubAppActivity.java

@ -1,11 +1,19 @@
1
package com.ai.ipu;
1
package com.ai.ipu.sa;
2
3
import java.util.HashMap;
4
import java.util.Map;
2 5
3 6
import android.os.Bundle;
4 7
import android.view.View;
5 8
6
import com.ai.ipu.func.SubAppStack;
7
import com.ai.ipu.mobile.app.AppRecord;
8 9
import com.ai.ipu.mobile.app.MobileOperation;
10
import com.ai.ipu.mobile.ui.comp.dialog.ConfirmDialog;
11
import com.ai.ipu.mobile.ui.view.FloatButton;
12
import com.ai.ipu.superapp.R;
13
import com.ai.mobile.im.util.MobileUtil;
14
import com.ailk.common.data.IData;
15
import com.ailk.common.data.impl.DataMap;
16
import com.ai.ipu.mobile.app.AppRecord;
9 17
import com.ai.ipu.mobile.frame.IpuBasicApplication;
10 18
import com.ai.ipu.mobile.frame.activity.TemplateSubActivity;
11 19
import com.ai.ipu.mobile.frame.config.ServerConfig;
@ -14,19 +22,9 @@ import com.ai.ipu.mobile.frame.template.TemplateWebView;
14 22
import com.ai.ipu.mobile.plugin.MobileStorage;
15 23
import com.ai.ipu.mobile.plugin.MobileUI;
16 24
import com.ai.ipu.mobile.ui.comp.dialog.ConfirmBlockDialog;
17
import com.ai.ipu.mobile.ui.comp.dialog.ConfirmDialog;
18
import com.ai.ipu.mobile.ui.view.FloatButton;
19 25
import com.ai.ipu.mobile.util.Constant.LoadingDialogStyle;
20
import com.ai.ipu.mobile.util.NatvieMenuConstant;
21
22
import com.ai.mobile.im.util.MobileUtil;
23
import com.ailk.common.data.IData;
24
import com.ailk.common.data.impl.DataMap;
25 26
26
import java.util.HashMap;
27
import java.util.Map;
28
29
public class SubAppActivity extends TemplateSubActivity {
27
public class SubAppActivity extends TemplateSubActivity{
30 28
	private static Map<String,Boolean> firstStatus = new HashMap<String,Boolean>();//判断子应用第一次开启状态
31 29
32 30
	private FloatButton floatButton;
@ -64,8 +62,7 @@ public class SubAppActivity extends TemplateSubActivity {
64 62
		} else {
65 63
			super.onCreate(savedInstanceState);
66 64
		}
67
		String appid = getIntent().getStringExtra(NatvieMenuConstant.APP_ID);
68
		SubAppStack.getInstance().push(appid,this);
65
69 66
		flipperLayout.post(new Runnable() {
70 67
			@Override
71 68
			public void run() {

+ 59 - 0
superapp-client/superappclient/src/main/java/com/ai/ipu/sa/func/AppMenuSettingPlugin.java

@ -0,0 +1,59 @@
1
package com.ai.ipu.sa.func;
2
3
import android.content.pm.PackageManager;
4
import android.widget.Toast;
5
import com.ai.ipu.mobile.data.SharedPrefUtil;
6
import com.ai.ipu.mobile.ui.HintUtil;
7
import com.ai.ipu.mobile.frame.IIpuMobile;
8
import com.ai.ipu.mobile.frame.config.MobileConfig;
9
import com.ai.ipu.mobile.frame.plugin.Plugin;
10
import org.json.JSONArray;
11
12
/**
13
 * Created by Administrator on 2017/3/21.
14
 */
15
public class AppMenuSettingPlugin extends Plugin {
16
17
    public AppMenuSettingPlugin(IIpuMobile ipuMobile) {
18
        super(ipuMobile);
19
    }
20
21
    /**
22
     * 获取缓存大小
23
     * */
24
    public void getCacheSize(JSONArray params) throws Exception{
25
        String cachedSize = DataCleanManager.getCacheSize(context.getCacheDir());
26
        callback(cachedSize);
27
    }
28
29
    /**
30
     * 清理缓存
31
     * */
32
    public void clearCache(JSONArray params) throws Exception{
33
        DataCleanManager.cleanInternalCache(context);
34
        callback("suc");
35
    }
36
37
    /**
38
     * 获取应用版本
39
     */
40
    public void getAppVersion(JSONArray params) throws Exception{
41
        String versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_CONFIGURATIONS).versionName;
42
        callback(versionName);
43
    }
44
45
    /*
46
    *修改字体大小
47
    * */
48
    public void changeTextSize(JSONArray params) throws Exception{
49
        String size = params.optString(0, "m");
50
51
        Boolean isChangeFontSize = Boolean.valueOf(MobileConfig.getInstance().getConfigValue("insertSnippet", "false"));
52
        if (isChangeFontSize){
53
            SharedPrefUtil.put("IpuSharedPre","code_snippet","<script>document.getElementsByTagName('html')[0].setAttribute('size','"+size+"');</script>");
54
            HintUtil.tip(context, "设置成功,应用下次重启后生效!", Toast.LENGTH_SHORT);
55
        }else {
56
            HintUtil.tip(context, "请在mobile-config.xml中配置insertSnippet属性!", Toast.LENGTH_SHORT);
57
        }
58
    }
59
}

+ 19 - 0
superapp-client/superappclient/src/main/java/com/ai/ipu/sa/func/CountInfoPlugin.java

@ -0,0 +1,19 @@
1
package com.ai.ipu.sa.func;
2
3
import com.ai.ipu.mobile.frame.IIpuMobile;
4
import com.ai.ipu.mobile.frame.plugin.Plugin;
5
import com.ai.ipu.mobile.util.IpuCountUtil;
6
7
import org.json.JSONArray;
8
9
public class CountInfoPlugin extends Plugin {
10
11
    public CountInfoPlugin(IIpuMobile ipumobile) {
12
        super(ipumobile);
13
    }
14
15
    public void sendDefine(JSONArray params) throws Exception {
16
        String content = params.getString(0);
17
        IpuCountUtil.sendDefine(content);
18
    }
19
}

+ 216 - 0
superapp-client/superappclient/src/main/java/com/ai/ipu/sa/func/DataCleanManager.java

@ -0,0 +1,216 @@
1
package com.ai.ipu.sa.func;
2
3
/**
4
 Created by Administrator on 2017/3/21.
5
 文 件 名:  DataCleanManager.java  *
6
 描述:  主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录
7
 */
8
9
import android.content.Context;
10
import android.os.Environment;
11
import android.text.TextUtils;
12
13
import java.io.File;
14
import java.math.BigDecimal;
15
16
/**
17
 * 本应用数据清除管理器
18
 */
19
public class DataCleanManager {
20
    /**
21
     * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * *
22
     *
23
     * @param context
24
     */
25
    public static void cleanInternalCache(Context context) {
26
        deleteFilesByDirectory(context.getCacheDir());
27
    }
28
29
    /**
30
     * * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * *
31
     *
32
     * @param context
33
     */
34
    public static void cleanDatabases(Context context) {
35
        deleteFilesByDirectory(new File("/data/data/"
36
                + context.getPackageName() + "/databases"));
37
    }
38
39
    /**
40
     * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) *
41
     *
42
     * @param context
43
     */
44
    public static void cleanSharedPreference(Context context) {
45
        deleteFilesByDirectory(new File("/data/data/"
46
                + context.getPackageName() + "/shared_prefs"));
47
    }
48
49
    /**
50
     * * 按名字清除本应用数据库 * *
51
     *
52
     * @param context
53
     * @param dbName
54
     */
55
    public static void cleanDatabaseByName(Context context, String dbName) {
56
        context.deleteDatabase(dbName);
57
    }
58
59
    /**
60
     * * 清除/data/data/com.xxx.xxx/files下的内容 * *
61
     *
62
     * @param context
63
     */
64
    public static void cleanFiles(Context context) {
65
        deleteFilesByDirectory(context.getFilesDir());
66
    }
67
68
    /**
69
     * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
70
     *
71
     * @param context
72
     */
73
    public static void cleanExternalCache(Context context) {
74
        if (Environment.getExternalStorageState().equals(
75
                Environment.MEDIA_MOUNTED)) {
76
            deleteFilesByDirectory(context.getExternalCacheDir());
77
        }
78
    }
79
80
    /**
81
     * * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * *
82
     *
83
     * @param filePath
84
     */
85
    public static void cleanCustomCache(String filePath) {
86
        deleteFilesByDirectory(new File(filePath));
87
    }
88
89
    /**
90
     * * 清除本应用所有的数据 * *
91
     *
92
     * @param context
93
     * @param filepath
94
     */
95
    public static void cleanApplicationData(Context context, String... filepath) {
96
        cleanInternalCache(context);
97
        cleanExternalCache(context);
98
        cleanDatabases(context);
99
        cleanSharedPreference(context);
100
        cleanFiles(context);
101
        if (filepath == null) {
102
            return;
103
        }
104
        for (String filePath : filepath) {
105
            cleanCustomCache(filePath);
106
        }
107
    }
108
109
    /**
110
     * * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * *
111
     *
112
     * @param directory
113
     */
114
    private static void deleteFilesByDirectory(File directory) {
115
        if (directory != null && directory.exists() && directory.isDirectory()) {
116
            for (File item : directory.listFiles()) {
117
                item.delete();
118
            }
119
        }
120
    }
121
122
    // 获取文件
123
    //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
124
    //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
125
    public static long getFolderSize(File file) throws Exception {
126
        long size = 0;
127
        try {
128
            File[] fileList = file.listFiles();
129
            for (int i = 0; i < fileList.length; i++) {
130
                // 如果下面还有文件
131
                if (fileList[i].isDirectory()) {
132
                    size = size + getFolderSize(fileList[i]);
133
                } else {
134
                    size = size + fileList[i].length();
135
                }
136
            }
137
        } catch (Exception e) {
138
            e.printStackTrace();
139
        }
140
        return size;
141
    }
142
143
    /**
144
     * 删除指定目录下文件及目录
145
     *
146
     * @param filePath
147
     * @param deleteThisPath
148
     */
149
    public static void deleteFolderFile(String filePath, boolean deleteThisPath) {
150
        if (!TextUtils.isEmpty(filePath)) {
151
            try {
152
                File file = new File(filePath);
153
                if (file.isDirectory()) {// 如果下面还有文件
154
                    File files[] = file.listFiles();
155
                    for (int i = 0; i < files.length; i++) {
156
                        deleteFolderFile(files[i].getAbsolutePath(), true);
157
                    }
158
                }
159
                if (deleteThisPath) {
160
                    if (!file.isDirectory()) {// 如果是文件,删除
161
                        file.delete();
162
                    } else {// 目录
163
                        if (file.listFiles().length == 0) {// 目录下没有文件或者目录,删除
164
                            file.delete();
165
                        }
166
                    }
167
                }
168
            } catch (Exception e) {
169
                // TODO Auto-generated catch block
170
                e.printStackTrace();
171
            }
172
        }
173
    }
174
175
    /**
176
     * 格式化单位
177
     *
178
     * @param size
179
     * @return
180
     */
181
    public static String getFormatSize(double size) {
182
        double kiloByte = size / 1024;
183
        if (kiloByte < 1) {
184
            return size + "Byte";
185
        }
186
187
        double megaByte = kiloByte / 1024;
188
        if (megaByte < 1) {
189
            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
190
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
191
                    .toPlainString() + "KB";
192
        }
193
194
        double gigaByte = megaByte / 1024;
195
        if (gigaByte < 1) {
196
            BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
197
            return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
198
                    .toPlainString() + "MB";
199
        }
200
201
        double teraBytes = gigaByte / 1024;
202
        if (teraBytes < 1) {
203
            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
204
            return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
205
                    .toPlainString() + "GB";
206
        }
207
        BigDecimal result4 = new BigDecimal(teraBytes);
208
        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
209
                + "TB";
210
    }
211
212
213
    public static String getCacheSize(File file) throws Exception {
214
        return getFormatSize(getFolderSize(file));
215
    }
216
}

+ 290 - 0
superapp-client/superappclient/src/main/java/com/ai/ipu/sa/func/MobileOpenApp.java

@ -0,0 +1,290 @@
1
package com.ai.ipu.sa.func;
2
3
import java.io.File;
4
import java.io.FileInputStream;
5
import java.io.FileOutputStream;
6
import java.util.HashMap;
7
import java.util.Map;
8
9
import org.json.JSONArray;
10
import org.json.JSONException;
11
12
import android.app.Activity;
13
import android.content.ComponentName;
14
import android.content.Context;
15
import android.content.Intent;
16
import android.os.Environment;
17
import android.os.Handler;
18
import android.os.Looper;
19
import android.text.TextUtils;
20
import android.util.Log;
21
import android.widget.Toast;
22
23
import com.ai.ipu.basic.file.FileUtil;
24
import com.ai.ipu.mobile.dynamic.app.NativeMenu;
25
import com.ai.ipu.mobile.dynamic.app.NativeMenuManager;
26
import com.ai.ipu.mobile.ui.HintUtil;
27
import com.ai.ipu.mobile.ui.activity.IpuUrlActivity;
28
import com.ai.ipu.mobile.util.NatvieMenuConstant;
29
import com.ai.ipu.sa.MainActivity;
30
import com.ai.ipu.sa.SubAppActivity;
31
import com.ailk.common.data.IData;
32
import com.ailk.common.data.IDataset;
33
import com.ailk.common.data.impl.DataMap;
34
import com.ailk.common.data.impl.DatasetList;
35
import com.ai.ipu.mobile.app.IpuAppInfo;
36
import com.ai.ipu.mobile.frame.IIpuMobile;
37
import com.ai.ipu.mobile.frame.multiple.MultipleAppConfig;
38
import com.ai.ipu.mobile.frame.multiple.MultipleManager;
39
import com.ai.ipu.mobile.frame.plugin.Plugin;
40
import com.ai.ipu.mobile.frame.template.TemplateDownloader;
41
import com.ai.ipu.mobile.frame.template.TemplateManager;
42
43
public class MobileOpenApp extends Plugin {
44
	private int OPEN_IPU_APP = 1;
45
	private int OPEN_NATIVE_APP = 2;
46
	private static final String IPU_APP_RESULT = "ipu_app_result";
47
	private Map<String, Boolean> subAppOpenStatus = new HashMap<String, Boolean>();
48
	private Map<String, NativeAppConfig> nativeAppConfigs = new HashMap<String, NativeAppConfig>();
49
	
50
	public MobileOpenApp(IIpuMobile ipuMobile) {
51
		super(ipuMobile);
52
	}
53
54
	/**
55
	 * 打开IPU应用
56
	 * 
57
	 * @param params
58
	 * @throws Exception
59
	 */
60
	public void openIpuApp(JSONArray params) throws Exception {
61
		String basePath = TemplateManager.getBasePath();// 欢迎页存储在multiple的应用中,所以需要放在setCurrAppId之前
62
		String data = params.getString(0);
63
		if(data == null || data.equals("")) {
64
			return;
65
		}
66
		
67
		final IData ipuParam = new DataMap(data);
68
		final String appId = ipuParam.getString(NatvieMenuConstant.APP_ID);
69
		MultipleManager.setCurrAppId(appId);
70
		MultipleManager.setMultiple(true);
71
		MultipleManager.setMultBasePath(basePath);
72
73
		//初始化基础路径
74
        TemplateManager.initBasePath(IpuAppInfo.getSdcardAppPath() + File.separator);// 存储模板基础路径
75
        
76
        if(subAppOpenStatus.get(appId)!=null&&subAppOpenStatus.get(appId)){
77
        	openSubApp(ipuParam);
78
        }else{
79
        	TemplateDownloader downloader = new TemplateDownloader(context) {
80
    			@Override
81
    			protected void downloadComplete() {
82
    				subAppOpenStatus.put(appId, true);
83
    				openSubApp(ipuParam);
84
    			}
85
    		};
86
    		downloader.updateResource();
87
        }
88
		
89
		/*置欢子应用欢迎页*/
90
		/*
91
		String appWelcomePage = ipuParam.getString("MENU_WELCOME_PAGE");//appConfig.getDefine("appWelcomePage");
92
		String welcomePage = Constant.START_FILE + FileUtil.connectFilePath(basePath, appWelcomePage);
93
		intent.putExtra("WELCOME_PAGE", welcomePage);
94
		 */	
95
	}
96
97
	public void closeIpuApp(JSONArray params) throws JSONException {
98
		String data = params.getString(0);
99
		if(context instanceof SubAppActivity){
100
			Intent intent = new Intent();
101
			intent.putExtra(IPU_APP_RESULT,data);
102
			context.setResult(0,intent);
103
			context.finish();
104
		}
105
	}
106
	
107
	private void openSubApp(IData ipuParam) {
108
		// TODO Auto-generated method stub
109
		Intent intent = new Intent(ipumobile.getActivity(), SubAppActivity.class);
110
		String indexPage = ipuParam.getString("MENU_PAGE_ACTION");//appConfig.getDefine("appIndexPage");
111
		intent.putExtra("INDEX_PAGE", indexPage);// IPU的初始页
112
		intent.putExtra(NatvieMenuConstant.APP_ID, ipuParam.getString(NatvieMenuConstant.APP_ID));
113
		startActivityForResult(intent, OPEN_IPU_APP);
114
	}
115
116
	/**
117
	 * 打开原生应用
118
	 */
119
	public void openNativeApp(JSONArray params) throws Exception {
120
		String data = params.getString(0);
121
		if(data == null || data.equals("")) {
122
			return;
123
		}
124
		IData nativeParam = new DataMap(data);
125
		String appId = nativeParam.getString(NatvieMenuConstant.APP_ID);
126
		String account = nativeParam.getString(NatvieMenuConstant.ACCOUNT);
127
		String tokenId = nativeParam.getString(NatvieMenuConstant.TOKEN_ID);
128
		String mainClass = nativeParam.getString(NatvieMenuConstant.MENU_ANDROID_MAIN_CLASS);
129
		String dyParam = TextUtils.isEmpty(nativeParam.getString(NatvieMenuConstant.EXTRA_PARAMS)) ? null : nativeParam.getString(NatvieMenuConstant.EXTRA_PARAMS);
130
		int type = nativeParam.getInt("ANDROID_TYPE");
131
		NativeAppConfig appConfig = nativeAppConfigs.get(appId);
132
		NativeMenu menu;
133
		String downloadUrl = appConfig.getDownloadUrl();
134
		String version = appConfig.getAppVersion() == null ? "1" : appConfig.getAppVersion();
135
		String pkgName = appConfig.getPackageName();
136
		String  apkPath = FileUtil.connectFilePath(IpuAppInfo.getIpuCommonDir(),  appId
137
				+ "/" + version + downloadUrl.substring(downloadUrl.lastIndexOf('/'),
138
				downloadUrl.length()));
139
		IData userInfos = new DataMap();
140
		userInfos.put(NatvieMenuConstant.ACCOUNT, account);
141
		userInfos.put(NatvieMenuConstant.TOKEN_ID, tokenId);
142
//		downloadUrl = "http://192.168.0.106:8083/msgo.apk";
143
//		apkPath = "/sdcard/ipu/msgo.apk";
144
//		version = "1";
145
//		type = 3;
146
//		mainClass = "com.unicom.zing.qrgo.activities.login.LoginActivity";
147
		menu = new NativeMenu(appId,apkPath,version, downloadUrl, pkgName,mainClass, dyParam, userInfos,type);
148
		switch (type){
149
			case 1:
150
				NativeMenuManager.openNativeInstallApp(context,menu,this);
151
				break;
152
			case 2:
153
				NativeMenuManager.openNativePluApp(context,menu);
154
				break;
155
			case 3:
156
				NativeMenuManager.openNativeReApp(context,menu,this);
157
				break;
158
			default:
159
				break;
160
		}
161
162
	}
163
	
164
	/**
165
	 * 初始化IPU应用的配置
166
	 */
167
	public void initAppConfig(JSONArray params) throws Exception {
168
		String apps = params.optString(0);
169
		if(isNull(apps)){
170
			error("App配置信息初始化异常!");
171
			return;
172
		}
173
		IDataset appDatas = new DatasetList(apps);
174
        IData appData;
175
        for(Object app : appDatas){
176
            appData = (IData)app;
177
            
178
            if(("I".equals(appData.getString(NatvieMenuConstant.APP_TYPE)))) {
179
            	MultipleAppConfig appConfig = new MultipleAppConfig(appData.getString("APP_REQUEST_HOST"),
180
                        appData.getString("APP_REQUEST_PATH"),
181
                        appData.getString("APP_REQUEST_SERVLET"),
182
                        appData.getString("APP_PATH"),
183
						appData.getString("SUB_RES_HOST"));
184
                MultipleManager.putAppConfig(appData.getString(NatvieMenuConstant.APP_ID), appConfig);
185
            } else if(("N".equals(appData.getString(NatvieMenuConstant.APP_TYPE)))) {
186
            	nativeAppConfigs.put(appData.getString(NatvieMenuConstant.APP_ID),
187
						new NativeAppConfig(appData.getString(NatvieMenuConstant.ANDROID_PACKAGE_NAME),
188
						appData.getString(NatvieMenuConstant.ANDROID_DOWNLOAD_URL),
189
						appData.getString(NatvieMenuConstant.ANDROID_APP_VERSION)));
190
            }
191
        }
192
	}
193
	
194
	@Override
195
	public void onActivityResult(int requestCode, int resultCode, Intent intent) {
196
		// TODO Auto-generated method stub
197
		if (requestCode == OPEN_IPU_APP) {
198
			MultipleManager.setMultiple(false);
199
			if(intent != null){
200
				callback(intent.getStringExtra(IPU_APP_RESULT));
201
//			HintUtil.alert(context, "IPU子应用的返回结果:" + result);
202
			}
203
		}
204
		if(requestCode == NativeMenuManager.REQ_INSTALL_CODE){
205
			MultipleManager.setMultiple(false);
206
			if(intent != null){
207
				String result = intent.getStringExtra("NATIVE_MENU_CALLBACK_RESULT");
208
				HintUtil.alert(context, "子应用的返回结果:" + result);
209
			}
210
		}
211
		if(requestCode == NativeMenuManager.REQ_REPLUGIN_CODE){
212
			MultipleManager.setMultiple(false);
213
			if(intent != null){
214
				String result = intent.getStringExtra("NATIVE_MENU_CALLBACK_RESULT");
215
				HintUtil.alert(context, "子应用的返回结果:" + result);
216
			}
217
		}
218
	}
219
220
    /**
221
     * 子应用session超时,返回主应用重新登录
222
     * @param params
223
     * @throws Exception
224
     */
225
    public void reLogin(JSONArray params) throws Exception {
226
        String action = params.optString(0,"Login");
227
        Intent intent = new Intent();
228
        intent.putExtra("ACTION",action);
229
        intent.putExtra("OPEN_FLAG","RE_LOGIN");
230
        intent.setComponent(new ComponentName(ipumobile.getActivity(), MainActivity.class));
231
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
232
        MultipleManager.setMultiple(false);
233
        ipumobile.getActivity().startActivity(intent);
234
    }
235
236
    /**
237
     * 打开url
238
     */
239
    public void openRemoteURL(JSONArray params) throws Exception {
240
        String remote_url = params.optString(0,"");
241
//        Intent intent = new Intent(ipumobile.getActivity(),BrowserActivity.class);
242
        Intent intent = new Intent(ipumobile.getActivity(),IpuUrlActivity.class);
243
        intent.putExtra("url", remote_url);
244
        startActivityForResult(intent, 0);
245
    }
246
    
247
    public boolean checkActivity(Activity context, String packageName, String className) {
248
         Intent intent = new Intent();
249
         intent.setClassName(packageName, className);
250
         return context.getPackageManager().resolveActivity(intent, 0) != null;
251
    }
252
    
253
    static class NativeAppConfig {
254
		private String packageName;
255
		private String downloadUrl;
256
		private String appVersion;
257
		private String menuMainClass;
258
		
259
		public NativeAppConfig(String packageName, String downloadUrl, String appVersion){
260
			this.packageName = packageName;
261
			this.downloadUrl = downloadUrl;
262
			this.appVersion = appVersion;
263
		}
264
265
		public String getPackageName() {
266
			return packageName;
267
		}
268
269
		public void setPackageName(String packageName) {
270
			this.packageName = packageName;
271
		}
272
273
		public String getDownloadUrl() {
274
			return downloadUrl;
275
		}
276
		public void setDownloadUrl(String downloadUrl) {
277
			this.downloadUrl = downloadUrl;
278
		}
279
280
		public String getAppVersion() {
281
			return appVersion;
282
		}
283
284
		public void setAppVersion(String appVersion) {
285
			this.appVersion = appVersion;
286
		}
287
	}
288
289
290
}

二进制
superapp-client/superappclient/src/main/res/drawable-hdpi/ic_launcher.png


二进制
superapp-client/superappclient/src/main/res/drawable-ldpi/ic_launcher.png


二进制
superapp-client/superappclient/src/main/res/drawable-mdpi/ic_launcher.png


二进制
superapp-client/superappclient/src/main/res/drawable-xhdpi/ic_launcher.png


+ 9 - 0
superapp-client/superappclient/src/main/res/menu/main.xml

@ -0,0 +1,9 @@
1
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
2
3
    <item
4
        android:id="@+id/action_settings"
5
        android:orderInCategory="100"
6
        android:showAsAction="never"
7
        android:title="@string/action_settings"/>
8
9
</menu>

二进制
superapp-client/superappclient/src/main/res/raw/public_key


+ 8 - 0
superapp-client/superappclient/src/main/res/values-sw600dp/dimens.xml

@ -0,0 +1,8 @@
1
<resources>
2
3
    <!--
4
         Customize dimensions originally defined in res/values/dimens.xml (such as
5
         screen margins) for sw600dp devices (e.g. 7" tablets) here.
6
    -->
7
8
</resources>

+ 9 - 0
superapp-client/superappclient/src/main/res/values-sw720dp-land/dimens.xml

@ -0,0 +1,9 @@
1
<resources>
2
3
    <!--
4
         Customize dimensions originally defined in res/values/dimens.xml (such as
5
         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
6
    -->
7
    <dimen name="activity_horizontal_margin">128dp</dimen>
8
9
</resources>

+ 11 - 0
superapp-client/superappclient/src/main/res/values-v11/styles.xml

@ -0,0 +1,11 @@
1
<resources>
2
3
    <!--
4
        Base application theme for API 11+. This theme completely replaces
5
        AppBaseTheme from res/values/styles.xml on API 11+ devices.
6
    -->
7
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
8
        <!-- API 11 theme customizations can go here. -->
9
    </style>
10
11
</resources>

+ 12 - 0
superapp-client/superappclient/src/main/res/values-v14/styles.xml

@ -0,0 +1,12 @@
1
<resources>
2
3
    <!--
4
        Base application theme for API 14+. This theme completely replaces
5
        AppBaseTheme from BOTH res/values/styles.xml and
6
        res/values-v11/styles.xml on API 14+ devices.
7
    -->
8
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
9
        <!-- API 14 theme customizations can go here. -->
10
    </style>
11
12
</resources>

+ 7 - 0
superapp-client/superappclient/src/main/res/values/dimens.xml

@ -0,0 +1,7 @@
1
<resources>
2
3
    <!-- Default screen margins, per the Android Design guidelines. -->
4
    <dimen name="activity_horizontal_margin">16dp</dimen>
5
    <dimen name="activity_vertical_margin">16dp</dimen>
6
7
</resources>

+ 8 - 0
superapp-client/superappclient/src/main/res/values/strings.xml

@ -0,0 +1,8 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<resources>
3
4
    <string name="app_name">超级客户端</string>
5
    <string name="action_settings">Settings</string>
6
    <string name="hello_world">Hello world!</string>
7
8
</resources>

+ 27 - 0
superapp-client/superappclient/src/main/res/values/styles.xml

@ -0,0 +1,27 @@
1
<resources>
2
3
    <!--
4
        Base application theme, dependent on API level. This theme is replaced
5
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
6
    -->
7
    <style name="AppBaseTheme" parent="android:Theme.Light">
8
        <!--
9
            Theme customizations available in newer API levels can go in
10
            res/values-vXX/styles.xml, while customizations related to
11
            backward-compatibility can go here.
12
        -->
13
    </style>
14
15
    <!-- Application theme. -->
16
    <style name="AppTheme" parent="AppBaseTheme">
17
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
18
    </style>
19
20
    <style name="MsgoTheme" parent="Theme.AppCompat.NoActionBar">
21
        <item name="android:textColorPrimary">@color/black</item>
22
        <item name="android:cursorVisible">true</item>
23
        <item name="android:textCursorDrawable">@null</item>
24
        <!-- Customize your theme here. -->
25
    </style>
26
27
</resources>

+ 20 - 0
superapp-client/superappclient/src/main/res/xml/file_path.xml

@ -0,0 +1,20 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<resources>
3
<paths>
4
    <!--
5
    files-path:          该方式提供在应用的内部存储区的文件/子目录的文件。
6
                          它对应Context.getFilesDir返回的路径:eg:”/data/data/com.***.***/files”。
7
8
    cache-path:          该方式提供在应用的内部存储区的缓存子目录的文件。
9
                          它对应Context.getCacheDir返回的路:eg:“/data/data/com.***.***/cache”;
10
11
    external-path:       该方式提供在外部存储区域根目录下的文件。
12
                          它对应Environment.getExternalStorageDirectory返回的路径
13
14
    external-files-path:  Context.getExternalFilesDir(null)
15
16
    external-cache-path: Context.getExternalCacheDir(String)
17
    -->
18
    <external-path name="download" path="" />
19
</paths>
20
</resources> 

+ 30 - 0
superapp-client/superappclient/src/main/res/xml/nfc_tech_filter.xml

@ -0,0 +1,30 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" >
3
    <tech-list>
4
        <tech>android.nfc.tech.MifareClassic</tech>
5
    </tech-list>
6
    <tech-list>
7
        <tech>android.nfc.tech.MifareUltralight</tech>
8
    </tech-list>
9
    <tech-list>
10
        <tech>android.nfc.tech.NfcA</tech>
11
    </tech-list>
12
    <tech-list>
13
        <tech>android.nfc.tech.NfcF</tech>
14
    </tech-list>
15
    <tech-list>
16
        <tech>android.nfc.tech.Ndef</tech>
17
    </tech-list>
18
    <tech-list>
19
        <tech>android.nfc.tech.NfcV</tech>
20
    </tech-list>
21
    <tech-list>
22
        <tech>android.nfc.tech.NfcB</tech>
23
    </tech-list>
24
    <tech-list>
25
        <tech>android.nfc.tech.NdefFormatable</tech>
26
    </tech-list>
27
    <tech-list>
28
        <tech>android.nfc.tech.IsoDep</tech>
29
    </tech-list>
30
</resources>

Merge branch 'master' of http://10.1.235.20:3000/ipu/android-share · ae9dd83fa4 - Nuosi Git Service
浏览代码

Merge branch 'master' of http://10.1.235.20:3000/ipu/android-share

leijie 8 年之前
父节点
当前提交
ae9dd83fa4
共有 31 个文件被更改,包括 86 次插入71 次删除
  1. 二进制
      ipu-server-lib/all/commons-codec-1.3.jar
  2. 二进制
      ipu-server-lib/all/commons-codec-1.6.jar
  3. 二进制
      ipu-server-lib/all/commons-dbcp-1.4.jar
  4. 二进制
      ipu-server-lib/all/commons-pool-1.5.4.jar
  5. 二进制
      ipu-server-lib/all/icu4j-2.6.1.jar
  6. 二进制
      ipu-server-lib/all/ipu-basic-1.0.jar
  7. 二进制
      ipu-server-lib/all/ipu-basic-3.0.jar
  8. 二进制
      ipu-server-lib/all/ipu-common-1.0.jar
  9. 二进制
      ipu-server-lib/all/ipu-common-3.0.jar
  10. 二进制
      ipu-server-lib/all/ipu-server-web-1.0.jar
  11. 0 0
      ipu-server-lib/all/java_memcache-release-2.5.3.jar
  12. 二进制
      ipu-server-lib/all/jaxen-1.1.1.jar
  13. 二进制
      ipu-server-lib/all/jdom-1.0.jar
  14. 二进制
      ipu-server-lib/all/mysql-connector-java-5.1.38.jar
  15. 二进制
      ipu-server-lib/all/poi-3.9.jar
  16. 二进制
      ipu-server-lib/all/wade-apache-1.0.jar
  17. 二进制
      ipu-server-lib/all/wade-apache.jar
  18. 0 0
      ipu-server-lib/all/wade-cache-1.0.jar
  19. 0 0
      ipu-server-lib/all/wade-common-1.0.jar
  20. 0 0
      ipu-server-lib/all/wade-data-1.0.jar
  21. 0 0
      ipu-server-lib/all/wade-database-1.0.jar
  22. 二进制
      ipu-server-lib/all/wade-mobile-data-1.0.jar
  23. 0 0
      ipu-server-lib/all/wade-sqlite-jdbc-1.0.jar
  24. 二进制
      ipu-server-lib/all/xalan-2.6.0.jar
  25. 二进制
      ipu-server-lib/all/xercesImpl-2.6.2.jar
  26. 二进制
      ipu-server-lib/all/xmlParserAPIs-2.6.2.jar
  27. 二进制
      ipu-server-lib/all/xom-1.0.jar
  28. 1 1
      wade-mobile-func/build/build.properties
  29. 二进制
      wade-mobile-func/libs/wade-mobile.jar
  30. 1 1
      wade-mobile-func/src/com/wade/mobile/func/MobileLocalLogic.java
  31. 84 69
      wade-mobile-func/src/com/wade/mobile/func/MobileUI.java

二进制
ipu-server-lib/all/commons-codec-1.3.jar


二进制
ipu-server-lib/all/commons-codec-1.6.jar


二进制
ipu-server-lib/all/commons-dbcp-1.4.jar


二进制
ipu-server-lib/all/commons-pool-1.5.4.jar


二进制
ipu-server-lib/all/icu4j-2.6.1.jar


二进制
ipu-server-lib/all/ipu-basic-1.0.jar


二进制
ipu-server-lib/all/ipu-basic-3.0.jar


二进制
ipu-server-lib/all/ipu-common-1.0.jar


二进制
ipu-server-lib/all/ipu-common-3.0.jar


二进制
ipu-server-lib/all/ipu-server-web-1.0.jar


ipu-server-lib/all/java_memcached-release_2.5.3.jar → ipu-server-lib/all/java_memcache-release-2.5.3.jar


二进制
ipu-server-lib/all/jaxen-1.1.1.jar


二进制
ipu-server-lib/all/jdom-1.0.jar


二进制
ipu-server-lib/all/mysql-connector-java-5.1.38.jar


二进制
ipu-server-lib/all/poi-3.9.jar


二进制
ipu-server-lib/all/wade-apache-1.0.jar


二进制
ipu-server-lib/all/wade-apache.jar


ipu-server-lib/all/wade-cache.jar → ipu-server-lib/all/wade-cache-1.0.jar


ipu-server-lib/all/wade-common.jar → ipu-server-lib/all/wade-common-1.0.jar


ipu-server-lib/all/wade-data.jar → ipu-server-lib/all/wade-data-1.0.jar


ipu-server-lib/all/wade-database.jar → ipu-server-lib/all/wade-database-1.0.jar


二进制
ipu-server-lib/all/wade-mobile-data-1.0.jar


ipu-server-lib/all/wade-sqlite-jdbc.jar → ipu-server-lib/all/wade-sqlite-jdbc-1.0.jar


二进制
ipu-server-lib/all/xalan-2.6.0.jar


二进制
ipu-server-lib/all/xercesImpl-2.6.2.jar


二进制
ipu-server-lib/all/xmlParserAPIs-2.6.2.jar


二进制
ipu-server-lib/all/xom-1.0.jar


+ 1 - 1
wade-mobile-func/build/build.properties

@ -5,5 +5,5 @@ source=${project_home}/src
5 5
classes=${project_home}/bin
6 6

7 7
encode=UTF-8
8
jdk_version=1.5
8
jdk_version=1.6
9 9
target=wade-mobile-func

二进制
wade-mobile-func/libs/wade-mobile.jar


+ 1 - 1
wade-mobile-func/src/com/wade/mobile/func/MobileLocalLogic.java

@ -77,6 +77,6 @@ public class MobileLocalLogic extends Plugin {
77 77
		/*执行自定义的业务逻辑*/
78 78
		param = BizManager.execute(wademobile, bizAction, param);
79 79
		MobileUI mobileUI = wademobile.getPluginManager().getPlugin(MobileUI.class);
80
		mobileUI.openTemplate(pageAction, param, true,true);
80
		mobileUI.openTemplate(pageAction, param, true);
81 81
	}
82 82
}

+ 84 - 69
wade-mobile-func/src/com/wade/mobile/func/MobileUI.java

@ -79,7 +79,7 @@ public class MobileUI extends Plugin {
79 79
		url = URLDecoder.decode(url);
80 80
		getWebView().loadRemoteUrl(url);
81 81
	}
82

82
	
83 83
	public void openPage(JSONArray param) throws Exception {
84 84
		String pageAction = param.getString(0);
85 85
		String data = param.getString(1);
@ -92,18 +92,10 @@ public class MobileUI extends Plugin {
92 92
				isAnimation);
93 93
	}
94 94
	
95
	public void loadPage(JSONArray param) throws Exception {
96
		String pageAction = param.getString(0);
97
		String data = param.getString(1);
98
		boolean isAnimation = true;
99
		if (param.length() > 2) {
100
			isAnimation = isNull(param.getString(2)) ? true : Boolean
101
					.parseBoolean(param.getString(2));
102
		}
103
		loadPage(pageAction, isNull(data) ? null : new DataMap(data),
104
				isAnimation);
95
	public void openPage(String pageAction, IData param) throws Exception {
96
		openPage(pageAction, param, true);
105 97
	}
106

98
	
107 99
	/**
108 100
	 * 调用接口打开页面
109 101
	 * 
@ -133,7 +125,69 @@ public class MobileUI extends Plugin {
133 125
			}
134 126
		}
135 127

136
		openTemplate(pageAction, data, isAnimation, true);
128
		openTemplate(pageAction, data, isAnimation);
129
	}
130

131
	public void openTemplate(JSONArray param) throws Exception {
132
		String pageAction = param.getString(0);
133
		String data = param.getString(1);
134
		boolean isAnimation = true;
135
		if (param.length() > 2) {
136
			isAnimation = isNull(param.getString(2)) ? true : Boolean
137
					.parseBoolean(param.getString(2));
138
		}
139
		openTemplate(pageAction, isNull(data) ? null : new DataMap(data), isAnimation);
140
	}
141
	
142
	/**
143
	 * 本地模式打开页面
144
	 * 多视图模式是否使用动画效果
145
	 */
146
	public void openTemplate(final String pageAction, final IData data,
147
			final boolean isAnimation) throws Exception {
148
		/* 获取模板相对路径 */
149
		final String templatePath = ServerPageConfig.getTemplate(pageAction);
150
		if (templatePath == null || "".equals(templatePath)) {
151
			IpuMobileUtility.error(Messages.NO_TEMPLATE + ",Action:" + pageAction);
152
		}
153

154
		context.runOnUiThread(new Runnable() {
155
			public void run() {
156
				try {
157
					// added by wyj解决在安卓客户端文本框显示null的问题
158
					if (data != null) {
159
						for (String key : data.keySet()) {
160
							if ("null".equals(data.get(key))) {
161
								data.put(key, "");
162
							}
163
						}
164
					}
165
					
166
					TemplateWebView webview = initFlipperPage(pageAction, isAnimation);
167
					webview.loadTemplate(templatePath, data);
168
				} catch (Exception e) {
169
					IpuMobileLog.e(TAG, e.getMessage(), e);
170
					HintUtil.tip(wademobile.getActivity(), e.getMessage());
171
				}
172
			}
173
		});
174
	}
175

176
	public void openTemplate(String pageAction, IData data)
177
			throws Exception {
178
		openTemplate(pageAction, data, true);
179
	}
180
	
181
	public void loadPage(JSONArray param) throws Exception {
182
		String pageAction = param.getString(0);
183
		String data = param.getString(1);
184
		boolean isAnimation = true;
185
		if (param.length() > 2) {
186
			isAnimation = isNull(param.getString(2)) ? true : Boolean
187
					.parseBoolean(param.getString(2));
188
		}
189
		loadPage(pageAction, isNull(data) ? null : new DataMap(data),
190
				isAnimation);
137 191
	}
138 192
	
139 193
	/**
@ -162,43 +216,20 @@ public class MobileUI extends Plugin {
162 216
			}
163 217
		}
164 218

165
		openTemplate(pageAction, data, isAnimation, false);
166
	}
167

168
	public void openPage(String pageAction, IData param) throws Exception {
169
		openPage(pageAction, param, true);
170
	}
171

172
	public void openTemplate(JSONArray param) throws Exception {
173
		String pageAction = param.getString(0);
174
		String data = param.getString(1);
175
		boolean isAnimation = true;
176
		if (param.length() > 2) {
177
			isAnimation = isNull(param.getString(2)) ? true : Boolean
178
					.parseBoolean(param.getString(2));
179
		}
180
		openTemplate(pageAction, isNull(data) ? null : new DataMap(data),
181
				isAnimation,true);
219
		loadTemplate(pageAction, data);
182 220
	}
183 221
	
184 222
	public void loadTemplate(JSONArray param) throws Exception{
185 223
		String pageAction = param.getString(0);
186 224
		String data = param.getString(1);
187
		boolean isAnimation = true;
188
		if (param.length() > 2) {
189
			isAnimation = isNull(param.getString(2)) ? true : Boolean
190
					.parseBoolean(param.getString(2));
191
		}
192
		openTemplate(pageAction, isNull(data) ? null : new DataMap(data),
193
				isAnimation,false);
225
		loadTemplate(pageAction, isNull(data) ? null : new DataMap(data));
194 226
	}
195

227
	
196 228
	/**
197 229
	 * 本地模式打开页面
198 230
	 * 多视图模式是否使用动画效果
199 231
	 */
200
	public void openTemplate(final String pageAction, final Map<?, ?> data,
201
			final boolean isAnimation ,final boolean isNewTemplate) throws Exception {
232
	public void loadTemplate(final String pageAction, final IData data) throws Exception {
202 233
		/* 获取模板相对路径 */
203 234
		final String templatePath = ServerPageConfig.getTemplate(pageAction);
204 235
		if (templatePath == null || "".equals(templatePath)) {
@ -208,25 +239,16 @@ public class MobileUI extends Plugin {
208 239
		context.runOnUiThread(new Runnable() {
209 240
			public void run() {
210 241
				try {
211
					
212
					Map<?, ?> dataTmp = data;
213 242
					// added by wyj解决在安卓客户端文本框显示null的问题
214 243
					if (data != null) {
215
						IData tmp = new DataMap(data.toString());
216
						for (String key : tmp.keySet()) {
217
							if (null == dataTmp.get(key) || "null".equals(dataTmp.get(key))) {
218
								tmp.put(key, "");
244
						for (String key : data.keySet()) {
245
							if ("null".equals(data.get(key))) {
246
								data.put(key, "");
219 247
							}
220 248
						}
221
						
222
						dataTmp = tmp;
223
					}
224
					if(isNewTemplate){						//是否为新开视图
225
						TemplateWebView webview = initFlipperPage(pageAction, isAnimation);
226
						webview.loadTemplate(templatePath, dataTmp);
227
					}else {
228
						((TemplateWebView) getWebView()).loadTemplate(templatePath, dataTmp);
229 249
					}
250
					
251
					((TemplateWebView) getWebView()).loadTemplate(templatePath, data);
230 252
				} catch (Exception e) {
231 253
					IpuMobileLog.e(TAG, e.getMessage(), e);
232 254
					HintUtil.tip(wademobile.getActivity(), e.getMessage());
@ -235,15 +257,6 @@ public class MobileUI extends Plugin {
235 257
		});
236 258
	}
237 259

238
	public void openTemplate(String pageAction, Map<?, ?> data)
239
			throws Exception {
240
		openTemplate(pageAction, data, true);
241
	}
242
	
243
	public void openTemplate(String pageAction, Map<?, ?> data, boolean isAnimation) throws Exception {
244
		openTemplate(pageAction, data, isAnimation, true);
245
	}
246

247 260
	/**
248 261
	 * @Title: getTemplate
249 262
	 * @Description: 页面部分刷新,不调用接口
@ -337,21 +350,23 @@ public class MobileUI extends Plugin {
337 350
		TemplateWebView webview = (TemplateWebView) mainFlipper.getNextView();
338 351
		
339 352
		if (webview == null) {
340
			webview = addFlipperPage(mainFlipper);
353
			webview = addFlipperPage(mainFlipper, pageAction);
354
		}else if(!pageAction.equals(webview.getTag())){
355
			mainFlipper.refreshTag(webview, pageAction);
341 356
		}
342 357
		
343 358
		if (isAnimation) {
344
			mainFlipper.setAnimation(AnimationResource.pushLeft[0],
359
			mainFlipper.setShowAnimation(AnimationResource.pushLeft[0],
345 360
					AnimationResource.pushLeft[1]);
346 361
			mainFlipper.setBackAnimation(AnimationResource.pushRight[0],
347 362
					AnimationResource.pushRight[1]);
348 363
		}
349
		webview.setTag(pageAction); //记录当前页面名称
364
		
350 365
		mainFlipper.setPreCurrView(webview);
351 366
		return webview;
352 367
	}
353 368

354
	private TemplateWebView addFlipperPage(final FlipperLayout mainFlipper) {
369
	private TemplateWebView addFlipperPage(final FlipperLayout mainFlipper, String pageAction) {
355 370
		TemplateWebView webview = new TemplateWebView(wademobile) {
356 371
			@Override
357 372
			protected void initialize() {
@ -369,6 +384,7 @@ public class MobileUI extends Plugin {
369 384
				.getFillParams(LinearLayout.LayoutParams.class));
370 385
		((WadeMobileActivity) wademobile).getWebviewSetting().setWebViewStyle(webview);// 设置webview的样式
371 386

387
		webview.setTag(pageAction); 
372 388
		mainFlipper.addNextView(webview);// 增加view
373 389
//		webview.postInvalidate();// 刷新页面
374 390
		return webview;
@ -852,8 +868,7 @@ public class MobileUI extends Plugin {
852 868
		final String pageAction = param.getString(0);
853 869
		final String data = param.getString(1);
854 870

855
        openTemplate(pageAction, isNull(data) ? null : new DataMap(data),
856
                true ,true);
871
        openTemplate(pageAction, isNull(data) ? null : new DataMap(data), true);
857 872
	}
858 873

859 874
	/**