class="file">display-client/assets/display-client/biz/js/more/scene/demo/DemoAdd.js
View File

BIN
display-client/assets/display-client/biz/js/more/scene/pageRefresh.js


BIN
display-client/assets/display-client/biz/js/more/scene/templateRefresh.js


+ 44 - 8
display-client/assets/display-client/biz/js/plugin/basic.js

@ -35,18 +35,54 @@ require(["domReady!","wadeMobile","util"], function(doc,WadeMobile) {
35 35
			},'PLATFORM');
36 36
		},'OSVERSION');
37 37
		var spans=infoDivs.eq(1).find("span");
38
		// IMEI:获取移动设备国际身份码
39
		WadeMobile.getSysInfo(function(info){
40
			spans.eq(0).html(info);
41
		},'IMEI');
42
		// MAC:获取移动设备的MAC地址
38
		// MAC:获取移动设备的MAC地址。
43 39
		WadeMobile.getNetInfo(function(info){
44
			spans.eq(1).html(info);
40
			spans.eq(0).html(info);
45 41
		},'MAC');
46
		// 获取IP地址
42
		// IP:获取移动设备的IPV4地址
47 43
		WadeMobile.getNetInfo(function(info){
48
			spans.eq(2).html(info);
44
			spans.eq(1).html(info);
49 45
		},'IP');
46
		// IMEI:获取移动设备国际身份码。 
47
		WadeMobile.getSysInfo(function(info){
48
			spans.eq(2).html(info);
49
		},'IMEI');
50
		// IMSI:获取国际移动用户识别码,区别移动用户的标志,储存在SIM卡中。 
51
		WadeMobile.getSysInfo(function(info){
52
			spans.eq(3).html(info);
53
		},'IMSI');
54
		// MODEL:获取手机型号。 
55
		WadeMobile.getSysInfo(function(info){
56
			spans.eq(4).html(info);
57
		},'MODEL');
58
		// UUID:通用唯一识别码,软件唯一标识。 
59
		WadeMobile.getSysInfo(function(info){
60
			spans.eq(5).html(info);
61
		},'UUID');
62
		// MANUFACTURER:获取制造商信息。 
63
		WadeMobile.getSysInfo(function(info){
64
			spans.eq(6).html(info);
65
		},'MANUFACTURER');
66
		// BRAND:获取手机品牌。 
67
		WadeMobile.getSysInfo(function(info){
68
			spans.eq(7).html(info);
69
		},'BRAND');
70
		// SDKVERSION:获取SDK版本。 
71
		WadeMobile.getSysInfo(function(info){
72
			spans.eq(8).html(info);
73
		},'SDKVERSION');
74
		// SIMNUMBER:SIM卡的序号 
75
		WadeMobile.getSysInfo(function(info){
76
			spans.eq(9).html(info);
77
		},'SIMNUMBER');
78
		// TIMEZONEID:国际时区 
79
		WadeMobile.getSysInfo(function(info){
80
			spans.eq(10).html(info);
81
		},'TIMEZONEID');
82
		// PRODUCTNAME:产品名称
83
		WadeMobile.getSysInfo(function(info){
84
			spans.eq(11).html(info);
85
		},'PRODUCTNAME');
50 86
		
51 87
		$("#info_list").show();
52 88
		$("#info_space").hide();

BIN
display-client/assets/display-client/biz/js/plugin/contacts.js


BIN
display-client/assets/display-client/biz/js/plugin/file/file-detail.js


BIN
display-client/assets/display-client/biz/js/plugin/ui/ui-customDialog.js


BIN
display-client/assets/display-client/biz/js/plugin/ui/ui-customWindow.js


BIN
display-client/assets/display-client/biz/js/plugin/ui/ui-slidingMenu.js


BIN
display-client/assets/display-client/biz/js/plugin/video.js


+ 23 - 0
display-client/assets/display-client/biz/js/plugin/voice.js

@ -0,0 +1,23 @@
1
require(['jcl','wadeMobile'], function($,WadeMobile) {
2
	$('#voiceRecognize').on('touchstart', function() {
3
		WadeMobile.startListen();
4
	});
5

6
	$('#voiceRecognize').on('touchend', function() {
7
		WadeMobile.endListen(function(val){
8
			$('#voiceText').text(val);
9
		});
10
	});
11
	
12
	$('#voiceRecognize').on('touchcancel', function() {
13
		WadeMobile.endListen(function(val){
14
			$('#voiceText').text(val);
15
		});
16
	});
17
	
18

19
	$('#vocicSynthesize').on('touchend', function() {
20
		WadeMobile.voiceSpeak($('#synthesize-content').val());
21
	});
22

23
});

+ 41 - 0
display-client/assets/display-client/biz/js/ui/gesture.js

@ -0,0 +1,41 @@
1
require([ "jcl", "gesture" ], function($) {
2
	var sendMsg = function(val) {
3
		var value = $("#msg").html();
4
		value = value + val;
5
		$("#msg").html(value);
6
	}
7
	var clearMsg = function() {
8
		$("#msg").html("");
9
	}
10
	
11
	$("#gestureBlock").bind("swipe", function(e) {
12
		clearMsg();
13
		sendMsg("你刚才滑动了一下;");
14
	});
15
	
16
	$("#gestureBlock").bind("swipeLeft", function(e) {
17
		sendMsg("你刚才向左滑动了;");
18
	});
19
	$("#gestureBlock").bind("swipeRight", function(e) {
20
		sendMsg("你刚才向右滑动了;");
21
	});
22
	$("#gestureBlock").bind("swipeUp", function(e) {
23
		sendMsg("你刚才向上滑动了;");
24
	});
25
	$("#gestureBlock").bind("swipeDown", function(e) {
26
		sendMsg("你刚才向下滑动了;");
27
	});
28
	
29
	$("#gestureBlock").bind("tap", function(e) {
30
		clearMsg();
31
		sendMsg("你刚才单击了;");
32
	});
33
	$("#gestureBlock").bind("doubleTap", function(e) {
34
		clearMsg();
35
		sendMsg("你刚才双击了;");
36
	});
37
	$("#gestureBlock").bind("longTap", function(e) {
38
		clearMsg();
39
		sendMsg("你刚才长按了;");
40
	});
41
});

display-server/web/biz/js/plugin/hammer.js → display-client/assets/display-client/biz/js/ui/hammer.js


+ 342 - 0
display-client/assets/display-client/res/js/frame/gesture.js

@ -0,0 +1,342 @@
1
/*!
2
 * touch events handler
3
 * http://www.wadecn.com/
4
 * auth:xiedx@asiainfo.com
5
 * Copyright 2015, WADE
6
 */
7
define(["jcl"],function($) {
8
	"use strict";
9
	
10
	$.tapPressedClassName = "active";
11
	
12
	var toString = Object.prototype.toString,
13
		push = Array.prototype.push,
14
		splice = Array.prototype.slice,//TODO splice方法存在异议
15
		indexOf = Array.prototype.indexOf;
16
	var expando = "touchevents" + (new Date()).valueOf(), uuid = 0;
17

18
	//event
19
	var hasTouch     = "ontouchstart" in window;
20
	var START_EVENT  = hasTouch ? 'touchstart': 'mousedown',
21
		MOVE_EVENT   = hasTouch ? 'touchmove' : 'mousemove', 
22
		END_EVENT    = hasTouch ? 'touchend' : 'mouseup',
23
		CANCEL_EVENT = hasTouch ? 'touchcancel' : 'mouseup';
24

25
	var handleCache = {};
26

27
	function addHandle(type, elem, callback){
28
		if(!type || !elem)
29
			return;
30
			
31
		var id = elem[expando];
32
		if(!id){
33
			id = ++ uuid;
34
			elem[expando] = id;
35
		}
36
		var handles = handleCache[type][id];
37
		if(!handles){
38
			handles = handleCache[type][id] = [];
39
		}
40
		push.call(handles, callback);
41
	}
42
	
43
	function removeHandle(type, elem, callback){
44
		if(!type || !elem)
45
			return;
46
			
47
		var id = elem[expando];
48
		if(!id){
49
			id = ++ uuid;
50
			elem[expando] = id;
51
		}
52
		
53
		var handles = handleCache[type][id];
54
		if(handles){
55
			var idx = indexOf.call(handles, callback);
56
			//TODO splice方法存在异议
57
			if(idx > -1) splice.call(handles, callback);
58
		}
59
	}
60

61
	function getHandle(type, elem){
62
		if(!type || !elem)
63
			return;
64
			
65
		var id = elem[expando];
66
		if(id && handleCache[type][id]){
67
			return handleCache[type][id];
68
		}
69
		return [];
70
	}
71
	
72
	function triggerHandle(type, elem, e){
73
		if(!type || !elem)
74
			return;
75
			
76
		var handles = getHandle(type, elem);
77
		if(!handles) return;
78
		for(var i = 0; i < handles.length; i++){
79
			handles[i].call(elem, e);
80
		}
81
	}
82
	
83
	function parentIfText(node) {
84
        return "tagName" in node ? node : node.parentNode;
85
    }
86

87
	function parentByEventType(type, node){
88
		if(!type || !node || !node.nodeType) return;
89
		var i = 0;
90
		while((!("tagName" in node) || (!("tap" == type && "ontap" in node.attributes) && !getHandle(type, node).length)) && i < 10){
91
			if(!node.parentNode || 1 != node.parentNode.nodeType)
92
				break;
93
			node = node.parentNode;
94
			i ++;
95
		}
96
		
97
		if(("tap" == type && "ontap" in node.attributes) || getHandle(type, node).length)
98
			return node;
99
	}
100

101
    function preventAll(e) {
102
        e.preventDefault();
103
        e.stopPropagation();
104
    }
105
    
106
    function getTarget(e){
107
    	return hasTouch ? e.touches[0].target : e.target;
108
    }
109

110
	function getXY(e){
111
		var x = hasTouch ? e.touches[0].pageX : e.clientX;
112
		var y = hasTouch ? e.touches[0].pageY : e.clientY;
113
		return [x,y];
114
	}
115
	
116
	function formNode(el){
117
		return $.nodeName(el, "input") || $.nodeName(el, "textarea") || $.nodeName("select");
118
	}
119
	
120
	var isMoved = false;
121
	var touch = {};
122
	var pressMaxDist = 10; //触发pressed事件的最大距离
123
	var swipeMinDist = 30; //触发swipe事件最小距离
124
	var longTapDelay = 500; //长点击时间值
125
	var tapEl;
126
	var pressTimer, longTapTimer, touchTimer;
127
	
128
	function swipeDirection(x1, x2, y1, y2) {
129
        var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2);
130
        if (xDelta >= yDelta) {
131
            return (x1 - x2 > 0 ? "Left" : "Right");
132
        } else {
133
            return (y1 - y2 > 0 ? "Up" : "Down");
134
        }
135
    }
136
    
137
	function longTap() {
138
        if (touch.last && (Date.now() - touch.last >= longTapDelay)) {
139
        	triggerHandle("longTap", touch.el);
140
            //touch = {};
141
        }
142
    }
143
    
144
	function docMoveEvent(e){
145
		if (e.originalEvent)
146
		   e = e.originalEvent;
147
		
148
		var xy = getXY(e);
149
		touch.x2 = xy[0];
150
		touch.y2 = xy[1];
151

152
		if(tapEl && touch.x1 && touch.y1 && 
153
			xy && xy.length && xy[0] && (Math.abs(xy[0] - touch.x1) > pressMaxDist 
154
			|| Math.abs(xy[1] - touch.y1) > pressMaxDist)){
155
			
156
			isMoved = true;
157
			clearTimeout(longTapTimer);
158
			clearTimeout(pressTimer);
159
			
160
			if(tapEl){
161
				$(tapEl).removeClass($.tapPressedClassName);
162
				tapEl = null;
163
			}
164
		}
165
	}
166

167
	function tapEndEvent(e){
168
		if(isMoved) return;
169
		
170
		e.touch = touch;
171
				
172
		touchTimer = setTimeout((function(event){
173
			return function(){
174
				touchTimer = null;
175
				if(tapEl){
176
					$(tapEl).removeClass($.tapPressedClassName);
177
					var strFn = $(tapEl).attr("ontap");
178
					if(strFn){
179
						(new Function(strFn)).call(tapEl, event);
180
					}
181
					triggerHandle("tap", tapEl);
182
				}
183
				clearTimeout(pressTimer);
184
				tapEl = null;
185
			};
186
		})(e), 120);
187
	}
188

189
	$(document).ready(function(){
190
		
191
		$(document.body).bind(START_EVENT, function(e){
192
			if (e.originalEvent)
193
           		e = e.originalEvent;
194

195
			var target = getTarget(e);
196
			if(!target) return;
197

198
			$(document.body).bind(MOVE_EVENT, docMoveEvent);
199

200
			if(formNode(target)){
201
				preventAll(e);
202
				return;
203
			}
204
					
205
			var now = Date.now(), delta = now - (touch.last || now);
206
			var xy = getXY(e);
207
			if(xy && xy.length && xy[0]){
208
				
209
				pressTimer && clearTimeout(pressTimer);
210
				touchTimer && clearTimeout(touchTimer);
211
				
212
				touch.el = parentIfText(target);
213
				touch.x1 = xy[0];
214
				touch.y1 = xy[1];
215
				touch.x2 = touch.y2 = 0;
216
				touch.last = now;
217

218
				if (delta > 0 && delta <= 300)
219
                	touch.isDoubleTap = true;
220
                	
221
            	longTapTimer = setTimeout(longTap, longTapDelay);
222
            
223
				var findTapEl = parentByEventType("tap", target);
224
				if(findTapEl){
225
					pressTimer = setTimeout(function(){
226
						$(tapEl).addClass($.tapPressedClassName);
227
					}, 100);
228
					if(tapEl && findTapEl != tapEl){
229
						$(tapEl).removeClass($.tapPressedClassName);
230
					}
231
				}
232
				tapEl = findTapEl;
233

234
				//排除双击时触发单击
235
				if(tapEl && !touch.isDoubleTap){
236
					$(tapEl).bind(END_EVENT, tapEndEvent);
237
				}
238
			}
239
		});
240

241
		$(document.body).bind(END_EVENT, function(e){
242
			if (e.originalEvent)
243
                e = e.originalEvent;
244

245
			setTimeout(function(){
246
				isMoved = false;
247
			}, 100);
248

249
			$(document.body).unbind(MOVE_EVENT, docMoveEvent);
250

251
			if(!touch.el || !touch.el.nodeType)
252
				return;
253
			
254
			touch.originalEvent = e;
255

256
			if (touch.isDoubleTap) {
257
				triggerHandle("doubleTap", touch.el, e);
258
				touch = {};
259
			}else if( (touch.x2 > 0 || touch.y2 > 0)
260
					&& (Math.abs(touch.x1 - touch.x2) > swipeMinDist || Math.abs(touch.y1 - touch.y2) > swipeMinDist)){
261
				
262
				var direct = swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2);
263
				e.touch = touch;
264
				
265
				triggerHandle("swipe", parentByEventType("swipe", touch.el), e);
266
				triggerHandle("swipe" + direct,  parentByEventType("swipe" + direct, touch.el), e);	
267

268
				touch = {};
269
                //touch.x1 = touch.x2 = touch.y1 = touch.y2 = touch.last = 0;
270
			}else if(tapEl && "last" in touch){
271
				//清除timer
272
				(Date.now() - touch.last >= longTapDelay) ? clearTimeout(touchTimer) : clearTimeout(longTapTimer);
273
				
274
				if(tapEl){
275
					$(tapEl).unbind(END_EVENT, tapEndEvent);
276
				}
277
			}
278
		});
279
		
280
		if(hasTouch){
281
			$(document.body).bind("touchcancel", function(e){
282
				touch = {};
283
				clearTimeout(longTapTimer);
284
			});
285
		}
286
	});
287
	
288
	var bindFn = $.fn["bind"];
289
	var unbindFn = $.fn["unbind"];
290
	var events = ["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "tap", "doubleTap", "longTap"];
291
	
292
	$.fn["bind"] = function(type, data, fn){
293
		if(arguments.length === 2 || data === false){
294
			fn = data;
295
			data = undefined;
296
		}
297
		
298
		if(indexOf.call(events, type) > -1){
299
			if("tap" == type && typeof(fn) == "string"){
300
				this.attr("ontap", callback);
301
			}else if(toString.call(fn) === "[object Function]"){
302
				this.each(function(){
303
					addHandle(type, this, fn);
304
				});
305
			}
306
			return this;
307
		}
308
		
309
		return bindFn.call(this, type, data, fn);
310
	};
311

312
	$.fn["unbind"] = function(type, fn){
313
		if(indexOf.call(events, type) > -1){
314
			if("tap" == type && typeof(fn) == "string"){
315
				this.attr("ontap", null);
316
			}else if(toString.call(fn) === "[object Function]"){
317
				this.each(function(){
318
					removeHandle(type, this, fn);
319
				});
320
			}
321
			return this;
322
		}
323
		
324
		return unbindFn.call(this, type, fn);
325
	};
326

327
    $.each(events, function(i, m) {
328
    	handleCache[m] = {};
329
        $.fn[m] = function(callback) {
330
            return this.bind(m, callback);
331
        };
332
    });
333
    
334
	$(document).bind("drag", preventAll);
335
	$(document).bind("dragstart", preventAll);
336
	$(document).bind("dragenter", preventAll);
337
	$(document).bind("dragover", preventAll);
338
	$(document).bind("dragleave", preventAll);
339
	$(document).bind("dragend", preventAll);
340
	$(document).bind("drop", preventAll);
341
	
342
});

+ 12 - 0
display-client/assets/display-client/res/js/mobile/expand-mobile.js

@ -304,6 +304,18 @@ define(["require"],function(require) {
304 304
				execute("scanMultiple",[]);
305 305
			},showNotification:function(content,title,icon,id){
306 306
				execute("showNotification",[content,title,icon,id]);
307
			},startListen:function(isUseDefautlDialog,callback,err){
308
				if(callback){
309
					WadeMobile.callback.storageCallback("startListen",callback);
310
				}
311
				execute("startListen",[isUseDefautlDialog],err);
312
			},endListen:function(callback,err){
313
				if(callback){
314
					WadeMobile.callback.storageCallback("endListen",callback);
315
				}
316
				execute("endListen",[],err);
317
			},voiceSpeak:function(content,err){
318
				execute("voiceSpeak",[content],err);
307 319
			}
308 320
		};
309 321
	})();

+ 2 - 0
display-client/assets/display-client/res/js/require-config.js

@ -13,6 +13,8 @@ require.config({
13 13
		'o' : 'frame/o',
14 14
		'oInput' : 'frame/o-input',
15 15
		'tap' : 'frame/tap',
16
		'gesture' : 'frame/gesture',
17
		
16 18
		'browserTool' : 'mobile/browser-toolkit',
17 19
		'clientTool' : 'mobile/client-toolkit',
18 20
		'mobileBrowser' : 'mobile/mobile-browser',

+ 1 - 1
display-client/assets/display-client/template/server-page.xml

@ -1 +1 @@
1
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

+ 1 - 1
display-client/assets/display-client/template/webapp/PluginIndex.html

@ -1 +1 @@
1
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

+ 1 - 1
display-client/assets/display-client/template/webapp/UIIndex.html

@ -1 +1 @@
1
v+xMYSRsnDIEkLw0/GDGYB284dTyh3dPLjLG+JtN1Gcv9mgTO7tWbFAiQQsh3265r7u4/w7tEBbglXYu+MNrfCd500sah1g3gE5f4ghTY1BOtxMLWx5uqvg97z8NlzqnSwyXJXaFKoCKg0M6dRECOF4PQd9HHBUZjNzW3Z/iS3VF0jWGztw/hSdB22A3PES4IXLA3nqytAhip8FXsAXAFbJ85gC2BaG6HBd6z8RkHx+2OVjduC0vzPvRdBg6DyxucJpcPjSr8GhBkQR71fmQ3hRzURDrW6ls5l2tKdy5cIxXph/Gtb0DjEzdyzRkv1csDK2HbDKPbnx5e6paUxFSsuw5GM6GrXcN/eCd38SXKL5gmVzg2yc1WoEVvPjqsQn9l1J8mf4PAYsM94pE6qWRegtDdsTDC4SZWP0szMrz8lDaymLfVqj6wvg97z8NlzqnSwyXJXaFKoCKg0M6dRECOF4PQd9HHBUZj5OmBDYTL2ZF0jWGztw/hSdB22A3PES4CkwIpoEnRtnqnDrAb/XwwrJ85gC2BaG6HBd6z8RkHx+2OVjduC0vzPvRdBg6DyxuvWh9wnqXklmF3l4OgkVE+RRzURDrW6ls5l2tKdy5cIxXph/Gtb0DjNQ0osGYmyfFRwVPh9JL8m608SouiBe2CQJEUsNRT+ShmT1SmVF8BdLqnDrAb/XwwrJ85gC2BaG6HBd6z8RkHx+2OVjduC0vzPvRdBg6DyxumYB6JVLhhkyDNoq41gFWivg97z8NlzqnSwyXJXaFKoCKg0M6dRECOF4PQd9HHBUZnQqsTEQIm//d1ZEORuaWgD7HbGQn02+8sGhZIHMZHAffzttAQcpoHhyTxGlZ+70NioNDOnURAjhBhSiicK1jWbqGNY467FOi38P96Piql1OQRzjXhIGNgF7Je/9AMG5PFHNREOtbqWzmXa0p3LlwjFemH8a1vQOMDufKDTLAVfTEtLNYZs0/8eb2ApWFZAiZ7DkYzoatdw394J3fxJcovqqnOxThgyh40lugY/RnsrGKg0M6dRECOEGFKKJwrWNZuoY1jjrsU6Lfw/3o+KqXU1V4mNHqtqYxQy6TJnrIn5X4Pe8/DZc6p0sMlyV2hSqAioNDOnURAjheD0HfRxwVGYS2NrnGFb1SxFvisHdDewfsORjOhq13Df3gnd/Elyi+urgAtpa+SOyEl+7qoWGmJwtDdsTDC4SZ+4jUl0i4sJBbj7icU+iDJQQIS5XloJ8orRBLU5/2Hu4DAljUwLApooTj3KdnwGoTyCqLRltH4GE4kFjrHndgqncC5xQMwJnRECulFu5Tm5rsORjOhq13Df3gnd/Elyi+QuxYhYfqbbXIKotGW0fgYYzqD2Jw2wAUvvQRC4Trsmx7ClkT+PddEhAEFzDH+HPbQ7gP4V2FtMkBJl2R1fft7t7Z/BHvaHBjC0N2xMMLhJne9s7H0FVZUpDgFhNodaWN6tXqStiLxT0My9OLNJjeAxYfpM60Flqhb1K2njT2+HuBFbz46rEJ/ZdSfJn+DwGLDPeKROqlkXoLQ3bEwwuEmVj9LMzK8/JQYi7+jFlGYtKc37fW6YiPhrkEH0nR7CRdfp+84/kfWjhCwP7d43oWVI1ttarBJtbGoszIT82rOheYniEwzRL2kA==
1
v+xMYSRsnDIEkLw0/GDGYB284dTyh3dPLjLG+JtN1Gcv9mgTO7tWbFAiQQsh3265r7u4/w7tEBbglXYu+MNrfCd500sah1g3gE5f4ghTY1BOtxMLWx5uqvg97z8NlzqnSwyXJXaFKoCKg0M6dRECOF4PQd9HHBUZjNzW3Z/iS3VF0jWGztw/hSdB22A3PES4IXLA3nqytAhip8FXsAXAFbJ85gC2BaG6HBd6z8RkHx+2OVjduC0vzPvRdBg6DyxucJpcPjSr8GhBkQR71fmQ3hRzURDrW6ls5l2tKdy5cIxXph/Gtb0DjEzdyzRkv1csDK2HbDKPbnx5e6paUxFSsuw5GM6GrXcN/eCd38SXKL5gmVzg2yc1WoEVvPjqsQn9l1J8mf4PAYsM94pE6qWRegtDdsTDC4SZWP0szMrz8lDaymLfVqj6wvg97z8NlzqnSwyXJXaFKoCKg0M6dRECOF4PQd9HHBUZj5OmBDYTL2ZF0jWGztw/hSdB22A3PES4CkwIpoEnRtnqnDrAb/XwwrJ85gC2BaG6HBd6z8RkHx+2OVjduC0vzPvRdBg6DyxuvWh9wnqXklmF3l4OgkVE+RRzURDrW6ls5l2tKdy5cIxXph/Gtb0DjNQ0osGYmyfFRwVPh9JL8m608SouiBe2CQJEUsNRT+ShmT1SmVF8BdLqnDrAb/XwwrJ85gC2BaG6HBd6z8RkHx+2OVjduC0vzPvRdBg6DyxumYB6JVLhhkyDNoq41gFWivg97z8NlzqnSwyXJXaFKoCKg0M6dRECOF4PQd9HHBUZnQqsTEQIm//d1ZEORuaWgD7HbGQn02+8sGhZIHMZHAffzttAQcpoHhyTxGlZ+70NioNDOnURAjhBhSiicK1jWbqGNY467FOi38P96Piql1OQRzjXhIGNgF7Je/9AMG5PFHNREOtbqWzmXa0p3LlwjFemH8a1vQOMDufKDTLAVfTEtLNYZs0/8eb2ApWFZAiZ7DkYzoatdw394J3fxJcovqqnOxThgyh40lugY/RnsrGKg0M6dRECOEGFKKJwrWNZuoY1jjrsU6Lfw/3o+KqXU1V4mNHqtqYxQy6TJnrIn5X4Pe8/DZc6p0sMlyV2hSqAioNDOnURAjheD0HfRxwVGYS2NrnGFb1SxFvisHdDewfsORjOhq13Df3gnd/Elyi+urgAtpa+SOyEl+7qoWGmJwtDdsTDC4SZ+4jUl0i4sJBbj7icU+iDJQQIS5XloJ8orRBLU5/2Hu4DAljUwLApooTj3KdnwGoTyCqLRltH4GE4kFjrHndgqncC5xQMwJnRECulFu5Tm5rsORjOhq13Df3gnd/Elyi+QuxYhYfqbbXIKotGW0fgYYzqD2Jw2wAUvvQRC4Trsmx7ClkT+PddEhAEFzDH+HPbQ7gP4V2FtMkBJl2R1fft7t7Z/BHvaHBjC0N2xMMLhJne9s7H0FVZUpDgFhNodaWN6tXqStiLxT0My9OLNJjeAxYfpM60Flqhb1K2njT2+HuBFbz46rEJ/ZdSfJn+DwGLDPeKROqlkXoLQ3bEwwuEmVj9LMzK8/JQYi7+jFlGYtKc37fW6YiPhrkEH0nR7CRdfp+84/kfWjhCwP7d43oWVI1ttarBJtbGoszIT82rOhcdvOHU8od3T7wCCwIVeBhmicLmi+yRAv9QIkELId9uua+7uP8O7RAW4JV2LvjDa3wnedNLGodYN2852+eU50JuDXSAmJn3jEIUc1EQ61upbOZdrSncuXCMV6YfxrW9A4xiHEtb9LTxp01l2Z8hXHUO2Z7lCZb0xNk4BG1BsUIpbw==

+ 1 - 1
display-client/assets/display-client/template/webapp/plugin/Basic.html

@ -1 +1 @@
1
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

+ 1 - 0
display-client/assets/display-client/template/webapp/plugin/Voice.html

@ -0,0 +1 @@
1
z0yhP3FuRXBwicwDNSv4TYRo7UL+86lhnmOp0tWXZwmLjxOamPvm633wgIhFf1KRSE2zNzLcz43qbpscmHilYmk7wTVxbwr7UHu3xCI3QdoBs6QDvX25ox+APjgqyZROXOAerPyeaQvdoXN4U9qoYHEDuseJ2tiTJBcqOAI7sml/IpLM6l3erQqJNUFDy/KL4+xfa2hSz3QqHbcckXinNrGhap+iAa+XstXlpdxCK1x15m4TbvLfDNCDngomRYEJJ3g1cKdrJf6xvG5x0xcKNgTMXcMtai9OktRAPxgDC/Ifg/g77+pgdYkUWx1KBvOLIzdN5rcCjc+jNjNVqL4FFMHll/3GC4xSC7lngEhcp+80Q1otpjXlttcW6um4RLp/pXx7CTYaeSO76932mFclTTMdKUwOqq6roYEAHcrny+s/NrpUIEE4vc38g5MjH/VsUjqWqv4LDwJJp1iGK7FVr6aRJ8cUSCgD86bX6W3V/yrIE0u8xsYRnAQvUIeQc40NRz/kmT+zmuCKg0M6dRECOKpRPWOi/5VuP8p+d9zuvxp+n7zj+R9aOP31q2mvVdUOyCqLRltH4GEoacsvAju+mkKykkfYc6WaREWtS8351RShUbupTFVgArq9XVEvOe/cJa4jHrRykrX0SEcKOqiPLvjpwxZFMWO0uW/KJNbhUvhoSNS1ZKkyrmXQXXt4y2wFWS1r/Zst041OldYlHbCgioqDQzp1EQI4o9DhE08lM37+mXkd+LdHcv796gxJSMaoP3ptvCFnyNOmtQl2zTiNqzc5MDBkTT3YjefXEoyW9gYLQ3bEwwuEmS1YYjtlvqlNgNNSpx41RiZuGd/XCwUICY3n1xKMlvYGC0N2xMMLhJmlWWW0GIwdR9Xh88SSPCj6RXfxsSyKn8zIKotGW0fgYTTrzGOGrow3ULBzoXu8hzjGHljmwVdDB0WIXkY9fkjatZabIW+WKZPGHljmwVdDB1emH8a1vQOMSQT7OoUbicMV9RJuYXTCFeMwvKUvfwx8OHaXQecEaHmKg0M6dRECOFDese/5gLoiKrhw+jet5sMV9RJuYXTCFVMyLFU9qRryKOKR6ctI/DLtriaX5HdYS18S/EHoCswfPS+b2xVkBESFMDVCu75OSX6fvOP5H1o4SYcqqntiB5uxElN7P6ujVJOrcYIP4dK2XbcFiphUAUQV9RJuYXTCFeMwvKUvfwx8XyOZ+qZS6dxxTtpTrDPtnjxk5yBiCKRzm+GCSD5xSf3Tynp8/0dSRbJ85gC2BaG6ra887JuCOqdtLoZUkHsswsgqi0ZbR+BhWsF5ClwrSik8fRLNMDuMjg9kRX0rRS4b4Qpg8lpsOhlfneN90W4p/j0vm9sVZARERNZtO1bgTybiiCE/tHsjp6e911XFF0kKsnzmALYFobrJwyvWRGKvfa5Jiw808ZjXGSWqhZdUNpqnvddVxRdJCrJ85gC2BaG6ZMBhBA2eX1tLBc+93RqtorKsvu81qoxhz/WeUvH3eXgLQ3bEwwuEmXrOZ8060NqzLKPHCyJ2+TqKg0M6dRECOABF29LV7hkJAoOMBB/rOhNGE4h1BgFWU0gZTdb/iJxAvJh2Gfl8TQXNNAKVxzSWUeW8VkEKUa2oznZqFnecgbBdefjiL88vEKbKptsVg+87KlpKgoBXUaaXEXwLrvDwIm0iTxxjJitxqTq7bmkUcOFfI5n6plLp3CHvL2D2621/snzmALYFobr278RZDAWcFNgQc4OnLMje4YAr8xV6i2GrpO8UfJl1IAFUgPwKAkpBC57GHZv+TRRLKfVdySNz7F8S/EHoCswfwTkWIYHfipHDsboGcPEWam3+e8o2vfLLOQ5zb1OImDnnVgP0NYlhN4KlAC5/tIaI

+ 1 - 1
display-client/assets/display-client/template/webapp/plugin/YunbaPush.html

@ -1 +1 @@
1
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

+ 1 - 0
display-client/assets/display-client/template/webapp/ui/Gesture.html

@ -0,0 +1 @@
1
z0yhP3FuRXBwicwDNSv4TYRo7UL+86lhnmOp0tWXZwmLjxOamPvm6/I9ZpLmnVaCPlKrAsmjXFfD5qNb6rfDmlSg9qadrLAro+IGlp6atw5lzD3a0VD4OHrXurhNkpgAGjnPViT3b92GnAHsMi4LHSHviUxRJ7/FPAqMuBHM/fkqHU6dh30OyfYoRFzL52GcQoZ4jXmQkHew6gJhmVGvvgrN8CNCkAYF9ckNbhhtxl7Q/FhOPx4yCjQ6GRHm2Su6j4sF1DH0hvsa0SeCL7U2WF3sg8aUbihR47gmQoMtBqZEQmLJ5XPVp/M1gEVcBjc4Fdof6ENT9dKCFJQgSlASIIA3Mnu0rEFzOE3U3f3CAPYiAeqUz41tifBpopIew5h+o2fAZNcnzt3Tjz0G85sx22FbKbXq+Um5AW8UvF5cjfu0YuPkJVE/OdtUxDoH+AKVFMhLzQgETV1tuVLOYxQ8IScJMXjaOK4E3lMked3taaS+Bw2cx++Q17eZDpSRjlnUVtr8vNuxaE886Zf5wBy2sQcIorYliYWY+pgk/QX+sFneKVF3XPlN/4qDQzp1EQI4HIE2MODLsJ8C+xpnHKaNxAtDdsTDC4SZO0mk37kR9d9/83IiAKx1usa3gPj8s06LREWtS8351RSFQ3/xqyZgAgmK9rCVadmtYdIRvlZkw7+qS4UnV5gZLW3+e8o2vfLL68mSTZX8jkJSL271jEsm5hsvhm1Lhw+/x9p94ecje5JSMaQ7hnxnKWyLSB6J8NULc6ntAFbx0HSfSSwxy12vlpRMFt2Vl3L1nCoFU68nHrfT36GdPCR0fcfqBUOHxHhxX+Kn4JBTPXptm6idLWGiK5r0Wv836tcEbeJBX/X1bHszwc/pZDkxsAJo3UiIJ1JVp73XVcUXSQq/ng/J9BqhcL7d8y38C0v68EUg9VjPRS3B3gZeyYWeSoybvCrOKGRiZlHn2x9HDTL58g2sOmddaA0fRsgCYXqx9KnaktkFWP/tb3Qxu4549riyvpmvJIi8sZqRnh4+M67/E/SB6mlK/+kbQqEPO01fAIu84RRk4D/4Fpetp++04SaBnFSh/r0M3pSqV9EUSAZ5MK6x/lL6+aLK5GAbpfsed4vpsFPGo7v1YdGWunDWCHIT2N1Kt44c/qzlajJaHKY=

+ 1 - 0
display-client/assets/display-client/template/webapp/ui/Hammer.html

@ -0,0 +1 @@
1
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

+ 14 - 4
display-client/assets/mobile-action.xml

@ -61,9 +61,14 @@
61 61
	<action name="browserFile" class="com.ailk.mobile.client.func.SwitchActivity" method = "browserFile"/>
62 62
	<action name="openDisplayPage" class="com.ailk.mobile.client.func.SwitchActivity" method = "openDisplayPage"/>
63 63
	<!-- MobileMap -->
64
	<!-- 
64 65
	<action name="location" class="com.wade.mobile.func.MobileMap" method="location"/>
65 66
	<action name="markMap" class="com.wade.mobile.func.MobileMap" method="markMap"/>
66 67
	<action name="selectLocation" class="com.wade.mobile.func.MobileMap" method="selectLocation"/>
68
	 -->
69
	 <action name="location" class="com.ai.ipu.map.func.MobileMap" method="location"></action>
70
	 <action name="markMap" class="com.ai.ipu.map.func.MobileMap" method="markMap"></action>
71
	 <action name="selectLocation" class="com.ai.ipu.map.func.MobileMap" method="selectLocation"></action>
67 72
	<!-- MobileStorage -->
68 73
	<action name="removeMemoryCache" class="com.wade.mobile.func.MobileStorage" method="removeMemoryCache"></action>
69 74
	<action name="clearMemoryCache" class="com.wade.mobile.func.MobileStorage" method="clearMemoryCache"></action>
@ -107,10 +112,10 @@
107 112
	<action name="unregisterForPush" class="com.ai.mobile.im.func.MobilePush" method="unregisterForPush"></action>
108 113
	<action name="sendText" class="com.ai.mobile.im.func.MobilePush" method="sendText"></action>
109 114
	<action name="setCallbackForPush" class="com.ai.mobile.im.func.MobilePush" method="setCallbackForPush"></action>
110
	<action name="registerForPushWithYunba"    class="com.ai.ipu.mobile.push.YunBaPush" method="registerForPush"></action>
111
	<action name="unregisterForPushWithYunba"  class="com.ai.ipu.mobile.push.YunBaPush" method="unregisterForPush"></action>
112
	<action name="sendTextWithYunba"           class="com.ai.ipu.mobile.push.YunBaPush" method="sendText"></action>
113
	<action name="setCallbackForPushWithYunba" class="com.ai.ipu.mobile.push.YunBaPush" method="setCallbackForPush"></action>
115
	<action name="registerForPushWithYunba"    class="com.ai.ipu.mobile.push.PushPlugin" method="registerForPush"></action>
116
	<action name="unregisterForPushWithYunba"  class="com.ai.ipu.mobile.push.PushPlugin" method="unregisterForPush"></action>
117
	<action name="sendTextWithYunba"           class="com.ai.ipu.mobile.push.PushPlugin" method="sendText"></action>
118
	<action name="setCallbackForPushWithYunba" class="com.ai.ipu.mobile.push.PushPlugin" method="setCallbackForPush"></action>
114 119

115 120
    <!-- Contact-->
116 121
	<action name="getContacts" class="com.wade.mobile.func.MobileContactDetail" method="getContacts"></action>
@ -131,4 +136,9 @@
131 136
	<action name="scanSingle" class="com.ipu.scan.func.IpuScan" method="scanSingle"></action>
132 137
	<action name="scanMultiple" class="com.ipu.scan.func.IpuScan" method="scanMultiple"></action>
133 138
	<action name="createQrCode" class="com.ipu.scan.func.IpuScan" method="createQrCode"></action>
139
	
140
	<!-- Voice -->
141
	<action name="startListen" class="com.ai.ipu.voice.IpuVoicePlugin" method="startListen"></action>
142
	<action name="endListen" class="com.ai.ipu.voice.IpuVoicePlugin" method="endListen"></action>
143
	<action name="voiceSpeak" class="com.ai.ipu.voice.IpuVoicePlugin" method="voiceSpeak"></action>
134 144
</actions>

+ 2 - 2
display-client/assets/mobile-config.xml

@ -1,7 +1,7 @@
1 1
<?xml version="1.0" encoding="utf-8"?>
2 2
<configs>
3 3
    <!-- 请求主机名或请求地址。包括服务器的ip地址和端口 -->
4
	<config name="request_host" value="http://123.57.35.51"/>
4
	<config name="request_host" value="http://172.20.10.2:8080"/>
5 5
	<!-- 必须。10.0.2.2为Android模拟器的保留ip地址。访问到本机电脑时使用 -->
6 6
	<!-- <config name="request_host" value="http://10.0.2.2:8080"/> -->
7 7
	<!-- 必须。容器应用名或请求根路径 -->
@ -13,7 +13,7 @@
13 13
	<!-- 非必须,默认UTF-8。 应用需要用到的编码 -->
14 14
	<config name="encode" value="UTF-8"/>
15 15
	<!-- 必须。应用license -->
16
	<config name="license" value="DrvY4GdwIo9AaV91hnnxlOv4N8NbuH7SQmf6St8uUi7q5VH00fbTkCsPkOkMy6u2HJ75Vk8gFNtzKuJbav3Pb3g0idpr8ORWWS7-tZFAlZb4nAvQ4LNBAwnYCD168PpgGc-DQIutWO8r9gxWpASkdrHn6lqOdu9V4R-/SWpqcF8=|@@MDA5NThBRjc4QTEzMjc1MDYwQjFGNzc3Qzk3OEI5RUQzNENENUU1RkVDNzk4NjhBQ0IzMDczMjYzRDM3Mzc0Qjk2NkY0RkQ5NjBCQTcwNjNFQ0YzRkJCMzAyNjczNDJCQjI1RDg1RkUwQTA4MjA4QkFCRDIzQ0ZCQkYzMjJBRjhDOUQzRTUzMEQ2OENBM0UxREZDOTMxOTEzQzFGNDY1QzZCRTUxNDFCMTQwRDU4M0E1ODc0RTYyMzI0ODdCMUY3ODNBRDJGNDRERkNFQjBCQjY0OTkxQkYzRDczNUI2RTc0OUE2QjNFQkZCNUJDMTM4M0MxRUEyRjZCOTg1Q0FBMDE3" ></config>
16
	<config name="license" value="eZ4ow-GqnLqoydPcsigJctXyQOMI-as7LBWfS5Ki6RWsyhg2R9MwvJnIhOOvI-bUi2QvBH4krtkCF7YH0eVCRDcXKhpuwOfcW8jlwUSGuXarjbrEfzZANn0Zv2oKdaGYy8uzo0/FrgzjsybizZtrObzbsDvdYNX29Z0e9yqRuKo=|@@MDA4NDI2MEUyRENBRkRDQjM1NTUwMjAzOUM2NzgyRjU3MTQxOEFGRERCQ0I1OUVFMTU0MDMyOEYwMjRGMzFCQjM4NjZFQTBCNDdCRUYxOTM2MjBEMDczQTlCNEIwMkE3QzRDOEQ4REFDRkQ2QTM1QjY2ODYxNTY0QzVCQjg1OEE3RTI1M0IzQ0JGNzMyNTI5NDM0NEVCNzBCOEUxN0NBOUIzQkU5RDFBQTI1MTU0MUQ2RjMyODcwNDU3RTFFM0EwRUFFMjk2OTZFMjg3QjUwRkYzQThFMTA1NDVFMTI4RTYyREVDNTY0QkRERTkyMjlBRjVDOTMxMzBBNjhBNURBMEQ3" ></config>
17 17
	<!-- 非必须。进入应用时的欢迎页面 --><!-- file:///android_asset为固定写法,表示工程的asset目录 -->
18 18
	<config name="loading_page" value="file:///android_asset/local/welcome.html"/>
19 19
	<!-- 非必须。更新应用的url -->

+ 1 - 0
display-client/assets/voice/asr_license

@ -0,0 +1 @@
1
79e4327fac94b13223cb2ac9d4d64acb8e254ce322b643541b3a7585a90bda5722e313b61716f9f0e5eefee625e50a2bdcbd7b028c1f61527e7ee99754eff08ccce70d67199844611dc6f4bdace0405d7c3fd3d52e607ddd56774a83e2a33d1b9959d13c92abfe5b3cfc0cc8fb8491066ac5d779b1d0cc4147656291912e3eac54bafd3c9ebe2edf612bb536f28b9a771db519e0843155b388f69afa91be62472cf1005339868d5e1af244a137707aa588af1ba03d908a69320d449e38329dede1a0770e6a725a04d4190545b120a9902340c1255c73a6ec08ad731c3f601c4e2efbeccd660c53497009522a94566a14da63bdc6fab1e51e25a7fc6f403bbf39

BIN
display-client/assets/voice/bd_etts_speech_female.dat


BIN
display-client/assets/voice/bd_etts_speech_male.dat


BIN
display-client/assets/voice/bd_etts_text.dat


BIN
display-client/assets/voice/s_1


+ 1 - 0
display-client/assets/voice/tts_license

@ -0,0 +1 @@
1
73a61110313f32b2677093c5876bb52bf121ac777617cd4eeac5b0665038e26ef85e0da20ef5bc6be8c6dbaf900b97e0c2d95a78c4f58bcba989d6f2db5f7a8643ae8e4436855cdac36fc2c26298f75287e71f2773dd880b388f6786eaf9be057b1ced69bbb32de97672d65e39776efaf7da4ac5b1ccbde1e0fe6d8a4195ef7554bafd3c9ebe2edf612bb536f28b9a771db519e0843155b388f69afa91be62472cf1005339868d5e1af244a137707aa588af1ba03d908a69320d449e38329dede1a0770e6a725a04d4190545b120a9902340c1255c73a6ec08ad731c3f601c4e2efbeccd660c53497009522a94566a14da63bdc6fab1e51e25a7fc6f403bbf39

+ 0 - 1
display-client/project.properties

@ -15,4 +15,3 @@ target=android-15
15 15
android.library=false
16 16
android.library.reference.1=..\\wade-mobile-lib
17 17
android.library.reference.2=..\\wade-mobile-common
18
android.library.reference.3=../ipu-scan-lib

BIN
display-client/res/drawable-ldpi/ic_launcher.png


BIN
display-client/res/drawable-ldpi/map_mark.png


+ 2 - 2
display-client/res/values/strings.xml

@ -1,7 +1,7 @@
1
<?xml version="1.0" encoding="utf-8"?>
1
<?xml version="1.0" encoding="utf-8"?>
2 2
<resources>
3 3

4
    <string name="app_name">display-client</string>
4
    <string name="app_name">IPU展示平台</string>
5 5
    <string name="action_settings">Settings</string>
6 6
    <string name="hello_world">Hello world!</string>
7 7


+ 18 - 0
display-client/src/com/ai/mobile/display/MainActivity.java

@ -2,6 +2,8 @@ package com.ai.mobile.display;
2 2

3 3
import android.os.Bundle;
4 4

5
import com.ai.ipu.display.R;
6
import com.umeng.analytics.MobclickAgent;
5 7
import com.wade.mobile.app.AppRecord;
6 8
import com.wade.mobile.app.MobileOperation;
7 9
import com.wade.mobile.app.MobileUtil;
@ -34,6 +36,22 @@ public class MainActivity extends TemplateMainActivity {
34 36
		return LoadingDialogStyle.HORIZONTAL;
35 37
	}
36 38
	
39
	@Override
40
	protected void onResume() {
41
		// TODO Auto-generated method stub
42
		super.onResume();
43
		//Umeng统计
44
		MobclickAgent.onResume(this);
45
	}
46
	
47
	@Override
48
	protected void onPause() {
49
		// TODO Auto-generated method stub
50
		super.onPause();
51
		//Umeng统计
52
		MobclickAgent.onPause(this);;
53
	}
54
	
37 55
//	@Override
38 56
//	protected void initActivity() throws Exception {
39 57
//		MobileScreenLock plugin = getPluginManager().getPlugin(

+ 4 - 0
display-client/src/com/ai/mobile/func/MobileOpenApp.java

@ -7,6 +7,8 @@ import android.content.Intent;
7 7

8 8
import com.ailk.common.data.IData;
9 9
import com.ailk.common.data.impl.DataMap;
10
import com.umeng.analytics.MobclickAgent;
11
import com.umeng.analytics.MobclickAgent.EScenarioType;
10 12
import com.wade.mobile.app.MobileUtil;
11 13
import com.wade.mobile.app.SimpleUpdate;
12 14
import com.wade.mobile.frame.IWadeMobile;
@ -18,6 +20,8 @@ public class MobileOpenApp extends Plugin {
18 20
	public MobileOpenApp(IWadeMobile wademobile) {
19 21
		super(wademobile);
20 22
		// TODO Auto-generated constructor stub
23
		//集成友盟基本统计分析功能(普通统计模式)
24
		MobclickAgent.setScenarioType(context, EScenarioType.E_UM_NORMAL);
21 25
	}
22 26

23 27
	public void openNative(JSONArray param) throws Exception {

+ 4 - 4
display-server/etc/server-page.xml

@ -36,8 +36,8 @@
36 36
	<action name="Contacts" template="template/webapp/plugin/Contacts.html"></action>
37 37
	<!-- NFC -->
38 38
	<action name="NFC" template="template/webapp/plugin/NFC.html"></action>
39
	<!-- 手势 -->
40
	<action name="Hammer" template="template/webapp/plugin/Hammer.html"></action>
39
	<!-- 语音识别&语音合成 -->
40
	<action name="Voice" template="template/webapp/plugin/Voice.html"></action>
41 41
	
42 42
	<!-- Web Component Demo-->
43 43
	<action name="WmTab" template="template/webapp/tag/WmTab.html"></action>
@ -83,9 +83,9 @@
83 83
	<action name="Slider" template="template/webapp/ui/Slider.html"></action>
84 84
	<action name="Tab" template="template/webapp/ui/Tab.html"></action>
85 85
	<action name="Tip" template="template/webapp/ui/Tip.html"></action>
86
	
86
	<!-- Hammer手势 -->
87
	<action name="Hammer" template="template/webapp/ui/Hammer.html"></action>
87 88
	<action name="Gesture" template="template/webapp/ui/Gesture.html"></action>
88
	<action name="HammerDemo" template="template/webapp/ui/HammerDemo.html"></action>
89 89
	
90 90
 	<!-- More Demo-->
91 91
 	<!-- 图表展示 -->

+ 1 - 7
display-server/web/biz/js/common/biz-mobile.js

@ -4,13 +4,7 @@
4 4
define(["require"],function(require) {
5 5
	var BizMobile = (function(){
6 6
		return{
7
			login:function(loginParam,err){ //加载进度条
8
				execute("login", [loginParam],err);
9
			},openAnimation:function(err){ //打开动画
10
				execute("openAnimation", [],err);
11
			},shutAnimation:function(err){ //关闭动画
12
				execute("shutAnimation", [],err);
13
			},openNative:function(data,err){
7
			openNative:function(data,err){
14 8
				execute("openNative", [data], err);
15 9
			}
16 10
		};

+ 54 - 64
display-server/web/biz/js/more/push/YunbaPush.js

@ -1,84 +1,74 @@
1
require(["common","wadeMobile","jcl","util"], function(Common, WadeMobile,$) {
2
	
3
//	$('#alias').val("Dave");//设置默认用户别名
4
//	$('#msgForSend').val("今天天气真不错!");//设置内容
1
require(["mobile","wadeMobile","common","hammer","handlebars","util"],function(Mobile,WadeMobile,Common,Hammer,Handlebars){	
2
	var iscroll;
5 3
	
4
	// 注册
6 5
	$("#register").tap(function() {
7
		//按钮
8
		var registerBtn = $('#register');
9
		
10
		if(registerBtn.attr('connected') != 'true'){
11
			var alias = $('#alias').val();
12
			if (escape(alias).indexOf( "%u" ) >= 0){
13
				alert("昵称不能含有中文,请重新输入!");
6
		// 昵称
7
		var alias = $('#alias').val();
8
		if (escape(alias).indexOf("%u") >= 0){
9
			Mobile.tip("昵称不能含有中文,请重新输入!");
10
			return;
11
		}
12
		//订阅主题/频道
13
		WadeMobile.registerForPushWithYunba(alias, function(obj){
14
			if(obj != 'SUC'){
15
				alert('频道订阅失败!');
14 16
				return;
15 17
			}
16
			//订阅主题/频道
17
			WadeMobile.registerForPushWithYunba(alias, function(obj){
18
				if(obj != 'SUC'){
19
					alert('频道订阅失败!');
20
				}
21
				registerBtn.css('background-color', '#ADFF2F');
22
				registerBtn.attr('connected', 'true');
23
			});
24
		}else{
25
			//退订主题/频道
26
			WadeMobile.unregisterForPushWithYunba(function(obj){
27
				if(obj != 'SUC'){
28
					alert('频道退订失败!')
29
				}
30
				registerBtn.css('background-color', '#F7F7F7');
31
				registerBtn.attr('connected', 'false');
32
			});
33
		}
18
			
19
			$("#registerWrap").hide();
20
			$("#main").show();
21
			$("#logoutWrap .user-alias").text(alias);
22
			iscroll = new iScroll("content");
23
		});
34 24
	});
35 25
	
26
	// 注销
27
	$("#logout").tap(function() {
28
		//退订主题/频道
29
		WadeMobile.unregisterForPushWithYunba();
30
		$("#registerWrap").show();
31
		$("#main").hide();
32
	});
36 33
	
34
	// 发送消息
37 35
	$("#send").tap(function() {
38
		//获取参数
39
		var array = function(info){
40
			var index = info.lastIndexOf("@");
41
			var alias = "ALL", msg = info;
42
			if(index != -1){
43
				index += info.substr(index).indexOf(' ');
44
				msg = info.substr(index).trim();
45
				
46
				var aliasInfo = info.substring(0, index).trim();
47
				var aliasList = alias.split(/\s+/);
48
				alias = aliasInfo.replace(new RegExp(/(@)/g), '').split(/\s+/)[0];
49
			}
50
			
51
			var result = new Array();
52
			result.push(alias);//发送用户
53
			result.push(msg);//发送内容
54
			return result;
55
			
56
		}($('#msgForSend').val());
36
		//发送内容
37
		var sendInfo = $('#msgInfo').val();
38
		// 发送到的用户,默认给全体人员发送消息
39
		var users = "ALL";
57 40
		
58 41
		//发送消息
59
		WadeMobile.sendTextWithYunba(array[0], array[1], function(obj){
60
			alert((obj != 'SUC') + '发送结果:' + obj);
42
		WadeMobile.sendTextWithYunba(users, sendInfo, function(obj){
43
			console.log('发送结果:' + obj);
61 44
			if(obj != 'SUC'){
62
				alert('消息发送失败!');
45
				Mobile.alert('消息发送失败!');
46
			} else {
47
				$('#msgInfo').val("");
63 48
			}
64 49
		});
65 50
	});
66 51
	
67
	window.receiveMessage = function(rec_msg){
68
		//接收格式为: {"MSG":"内容", "ALIAS":"昵称"}
69
		var recData = new Wade.DataMap(rec_msg);
70
		var recAlias = recData.get("ALIAS"), recMsg = recData.get("MSG");
71
		
72
		var content = '<br/><span ';
73
		//如果是自己发言,标注颜色
74
		if(recAlias == $("#alias").val()){
75
			content += 'style="color:#ADFF2F"';
76
			recAlias = '我';
52
	window.receiveMessage = function(result){
53
		//处理IOS返回值为对象的情况
54
		if(typeof(result) == "object" ){
55
			result = JSON.stringify(result);
77 56
		}
78
		content += '>' + recAlias + ": " + recMsg + '</span>';
79
		
80
		$('#msgForReceive').prepend($(content)); 
57
		// 接收格式为: {"MSG":"内容", "ALIAS":"昵称"}
58
		var json = eval("(" + result+ ")");
59
		var html = "";
60
		// 自己发言
61
		if(json.ALIAS == $("#alias").val()){
62
			html = Handlebars.compile($("#T_myChat").val())(json);
63
			
64
		} else {
65
			html = Handlebars.compile($("#T_othersChat").val())(json);
66
		}
67
		$("#chatContent").append($(html));
68
		iscroll.refresh();
69
		iscroll.scrollToElement($("#chatContent>div").get($("#chatContent>div").length-1), 200);
81 70
	}
71
	
82 72
	//设置回调函数
83 73
	WadeMobile.setCallbackForPushWithYunba("receiveMessage");
84 74
});

+ 2 - 1
display-server/web/biz/js/plugin/basic.js

@ -1,5 +1,5 @@
1 1
require(["domReady!","wadeMobile","util"], function(doc,WadeMobile) {
2
	new iScroll("content");
2
	var iscroll = new iScroll("content");
3 3
	// 调用手机拨打电话
4 4
	$("#call").tap(function() {
5 5
		// 电话号码
@ -86,5 +86,6 @@ require(["domReady!","wadeMobile","util"], function(doc,WadeMobile) {
86 86
		
87 87
		$("#info_list").show();
88 88
		$("#info_space").hide();
89
		iscroll.refresh();
89 90
	}
90 91
});

+ 23 - 0
display-server/web/biz/js/plugin/voice.js

@ -0,0 +1,23 @@
1
require(['jcl','wadeMobile'], function($,WadeMobile) {
2
	$('#voiceRecognize').on('touchstart', function() {
3
		WadeMobile.startListen();
4
	});
5

6
	$('#voiceRecognize').on('touchend', function() {
7
		WadeMobile.endListen(function(val){
8
			$('#voiceText').text(val);
9
		});
10
	});
11
	
12
	$('#voiceRecognize').on('touchcancel', function() {
13
		WadeMobile.endListen(function(val){
14
			$('#voiceText').text(val);
15
		});
16
	});
17
	
18

19
	$('#vocicSynthesize').on('touchend', function() {
20
		WadeMobile.voiceSpeak($('#synthesize-content').val());
21
	});
22

23
});

+ 5 - 7
display-server/web/biz/js/ui/button.js

@ -1,17 +1,14 @@
1 1
require(["domReady!","util"], function(doc,util) {
2 2
	new iScroll("content");
3
	/*也可以通过标签属性ontap=";"来展示触感,使用ontap演示*/
4
	//$("#title_button").tap(function(){});
5
	//$("#icon_button").tap(function(){});
6 3
	
7 4
	$("#cancel").tap(function(){
8
		alert("长按取消按钮有触感");
5
		alert("您点击了取消按钮");
9 6
	});
10 7
	$("#submit").tap(function(){
11
		alert("长按提交按钮有触感");
8
		alert("您点击了提交按钮");
12 9
	});
13 10
	$("#delete").tap(function(){
14
		alert("长按删除按钮有触感");
11
		alert("您点击了删除按钮");
15 12
	});
16 13
	
17 14
	//设置 dropmenu
@ -37,7 +34,8 @@ require(["domReady!","util"], function(doc,util) {
37 34
			$("#dropmenu").css("display","none");
38 35
		}
39 36
	});
40
//设置 dropmenu
37
	
38
	//设置 dropmenu2
41 39
	//初始化(CSS已将它默认放到了界面之外,以下设置不会造成闪烁)
42 40
	$("#dropmenu2").find("ul").css("top",$("#dropmenu2").height()*(-1) + "px");
43 41
	$("#dropmenu2").find("ul").css("transition","transform 0.2s ease-out");

+ 0 - 52
display-server/web/biz/js/ui/hammer-demo.js

@ -1,52 +0,0 @@
1
require([ "jcl", "hammer" ], function($, Hammer) {
2
	function _toString(obj) {
3
		var str = "";
4
		for ( var p in obj) {
5
			if (obj.hasOwnProperty(p)) {
6
				str += " " + p + ":" + obj[p];
7
			}
8
		}
9
		console.log(str);
10
		log(str);
11
	}
12
	function log(val) {
13
		var value = $("#msg").html();
14
		$("#msg").html(value + " <br/>" + val);
15
	}
16
	var myElement = document.getElementById("gestureBlock");
17

18
	var mc = new Hammer.Manager(myElement);
19
	mc.add(new Hammer.Tap({
20
		event : "doubletap",
21
		taps : 2
22
	}));
23
	mc.add(new Hammer.Tap({
24
		event : "singletap"
25
	}));
26

27
	mc.get("doubletap").recognizeWith("singletap");
28
	mc.get("singletap").requireFailure("doubletap");
29

30
	mc.on("singletap doubletap", function(ev) {
31
		log(ev.type + " ");
32
	});
33

34
	var mc = new Hammer(myElement);
35

36
	mc.on("pan", function(ev) {
37
		log("pan" + ev.direction);
38
	});
39

40
	mc.on("swipe", function(ev) {
41
		log("swipe " + ev.direction);
42

43
	});
44
	mc.on("tap", function(ev) {
45
		log("tap " + ev.direction);
46

47
	});
48
	mc.on("doubletap", function(ev) {
49
		log("doubletap " + ev.direction);
50

51
	});
52
});

+ 111 - 0
display-server/web/biz/js/ui/hammer.js

@ -0,0 +1,111 @@
1
require([ "domReady!", "mobile", "hammer", "jquery", "util" ], function(doc, Mobile, Hammer, jQuery) {
2
	new iScroll("content");
3
	
4
	// rotate
5
	var rotateHam = new Hammer($(".rotate")[0], {
6
		domEvents : true
7
	});
8
	var liveScale = 1;
9
	var currentRotation = 0;
10
	rotateHam.get('rotate').set({
11
		enable : true
12
	});
13
	jQuery(".rotate").on("rotate",function(e) {
14
		var rotation = currentRotation + Math.round(liveScale* e.originalEvent.gesture.rotation);
15
		jQuery(this).find("img").css("transform", "rotate( " + rotation + "deg)");
16
	});
17
	jQuery(".rotate").on("rotateend", function(e) {
18
		currentRotation += Math.round(e.originalEvent.gesture.rotation);
19
	});
20

21
	// pinch
22
    var pinchHam = new Hammer($(".pinch")[0], {
23
    	domEvents : true
24
	});
25
	var width = 1900;
26
	var height = 400;
27
	var left = 950;
28
	var top = 220;
29
	pinchHam.get('pinch').set({
30
		enable : true
31
	});
32
	jQuery(".pinch").on("pinch", function(e) {
33
		if (width * e.originalEvent.gesture.scale >= 300) {
34
			jQuery(this).find("img").css({
35
				width : width * e.originalEvent.gesture.scale,
36
				"margin-left" : -left * e.originalEvent.gesture.scale,
37
				height : height * e.originalEvent.gesture.scale,
38
				"margin-top" : -top * e.originalEvent.gesture.scale
39
			});
40
		}
41
		console.log(e.originalEvent.gesture.scale);
42
	});
43
	jQuery(".pinch").on("pinchend", function(e) {
44
		width = width * e.originalEvent.gesture.scale;
45
		height = height * e.originalEvent.gesture.scale;
46
		left = left * e.originalEvent.gesture.scale;
47
		top = top * e.originalEvent.gesture.scale;
48
		console.log(width);
49
	});
50
	
51
	// press
52
	new Hammer($( ".press")[0], {
53
      domEvents: true
54
    });
55
    $(".press").on("press", function(e) {
56
       $(".demo-overlay").toggle();
57
    });
58
    
59
    // pan
60
	var panImg, panMargin;
61
	new Hammer($(".pan")[0], {
62
		domEvents : true
63
	});
64
	jQuery(".pan").on("panstart", function(e) {
65
		panImg = $(".pan img");
66
		panMargin = parseInt(panImg.css("margin-left"), 10);
67
	});
68
	jQuery(".pan").on("pan", function(e) {
69
		console.log("pan");
70
		var delta = panMargin + e.originalEvent.gesture.deltaX;
71
		console.log(delta);
72
		if (delta >= -1750 && delta <= -150) {
73
			panImg.css({"margin-left" : panMargin + e.originalEvent.gesture.deltaX});
74
		}
75
	});
76
    
77
    // tap
78
	new Hammer($(".tap")[0], {
79
		domEvents : true
80
	});
81
	var tapCurrent = 0;
82
	var tapImgs = $(".demo-box.tap img");
83
	$(".tap").on("tap", function(e) {
84
		if (tapImgs[tapCurrent + 1]) {
85
			tapCurrent++;
86
		} else {
87
			tapCurrent = 0;
88
		}
89
		tapImgs.removeClass("active");
90
		tapImgs.eq(tapCurrent).addClass("active");
91
	});
92
	
93
	// swipe
94
	new Hammer($(".swipe")[0], {
95
		domEvents : true
96
	});
97
	var swipeCurrent = 0;
98
	var swipeImgs = $(".demo-box.swipe img");
99
	$(".swipe").on("swipeleft", function(e) {
100
		if (swipeImgs[swipeCurrent + 1]) {
101
			swipeImgs.removeClass("active");
102
			swipeImgs.eq(++swipeCurrent).addClass("active");
103
		}
104
	});
105
	$(".swipe").on("swiperight", function(e) {
106
		if (swipeImgs[swipeCurrent - 1]) {
107
			swipeImgs.removeClass("active");
108
			swipeImgs.eq(--swipeCurrent).addClass("active");
109
		}
110
	});
111
});

+ 12 - 0
display-server/web/res/js/mobile/expand-mobile.js

@ -304,6 +304,18 @@ define(["require"],function(require) {
304 304
				execute("scanMultiple",[]);
305 305
			},showNotification:function(content,title,icon,id){
306 306
				execute("showNotification",[content,title,icon,id]);
307
			},startListen:function(isUseDefautlDialog,callback,err){
308
				if(callback){
309
					WadeMobile.callback.storageCallback("startListen",callback);
310
				}
311
				execute("startListen",[isUseDefautlDialog],err);
312
			},endListen:function(callback,err){
313
				if(callback){
314
					WadeMobile.callback.storageCallback("endListen",callback);
315
				}
316
				execute("endListen",[],err);
317
			},voiceSpeak:function(content,err){
318
				execute("voiceSpeak",[content],err);
307 319
			}
308 320
		};
309 321
	})();

+ 0 - 1
display-server/web/template/webapp/Index.html

@ -6,7 +6,6 @@
6 6
	<title>导航</title>
7 7
	{%>template/common/Head.html%}
8 8
	<script type="text/javascript" src="biz/js/index.js"></script>
9
	<link href="biz/css/project.css" rel="stylesheet" type="text/css" />
10 9
</head>
11 10
<body>
12 11
<div class="c_navBar">

+ 2 - 2
display-server/web/template/webapp/PluginIndex.html

@ -59,8 +59,8 @@
59 59
		<div class="pic"><span class="e_ico-nfc"></span></div>
60 60
		<div class="text">NFC</div>
61 61
	</li>
62
	<li action="Hammer">
62
	<li action="Voice">
63 63
		<div class="pic"><span class="e_ico-nfc"></span></div>
64
		<div class="text">手势</div>
64
		<div class="text">语音识别</div>
65 65
	</li>
66 66
</ul>

+ 4 - 4
display-server/web/template/webapp/UIIndex.html

@ -39,12 +39,12 @@
39 39
		<div class="pic"><span class="e_ico-ui-tip"></span></div>
40 40
		<div class="text">提示</div>
41 41
	</li>
42
	<li action="Gesture">
42
	<li action="Hammer">
43 43
		<div class="pic"><span class="e_ico-ui-tip"></span></div>
44
		<div class="text">手势1</div>
44
		<div class="text">手势</div>
45 45
	</li>
46
	<li action="HammerDemo">
46
	<li action="Gesture">
47 47
		<div class="pic"><span class="e_ico-ui-tip"></span></div>
48
		<div class="text">手势2</div>
48
		<div class="text">WADE5手势</div>
49 49
	</li>
50 50
</ul>

+ 1 - 1
display-server/web/template/webapp/plugin/Network.html

@ -43,7 +43,7 @@
43 43
					<div class="main">
44 44
						<div class="title">股票</div>
45 45
					</div>
46
					<div class="fn fn-2" id="getDataContent">加载数据</div>
46
					<div class="fn fn-4" id="getDataContent">加载数据</div>
47 47
				</div>
48 48
			</li>
49 49
		</ul>

+ 64 - 0
display-server/web/template/webapp/plugin/Voice.html

@ -0,0 +1,64 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>语音</title>
7
	{%>template/common/Head.html%}
8
	<script type="text/javascript" src="biz/js/plugin/voice.js"></script>
9
<style>
10
.no-border {
11
	border: 0;
12
}
13
</style>
14
</head>
15
<body>
16
17
<div class="c_navBar">
18
	<div class="left">
19
		<div class="back">
20
			<span class="e_ico-back"></span>
21
			<span class="text">语音</span>
22
		</div>
23
	</div>
24
</div>
25
26
<div class="m_content m_content-nofooter" id="content" >
27
<div>
28
	<div class="c_title">语音识别</div>
29
	<div class="c_list">
30
		<ul>
31
			<li>
32
				<div class="content">
33
					<div class="main">
34
						<div class="title">语音识别</div>
35
						<div class="info">单击语音识别,录制一段语音</div>
36
					</div>
37
					<div class="fn fn-2" id="voiceRecognize">语音识别</div>
38
				</div>
39
			</li>
40
			<li ontap=";">
41
				<div class="content">
42
					<div class="main" id="voiceText">&nbsp;</div>
43
				</div>
44
			</li>
45
		</ul>
46
	</div>
47
	<div class="c_title">语音合成</div>
48
	<div class="c_list">
49
		<ul>
50
			<li>
51
				<div class="content">
52
					<div class="main">
53
						<input type="text" placeholder="请输入语音内容" id="synthesize-content" class="no-border">
54
					</div>
55
					<div class="fn fn-2" id="vocicSynthesize">语音合成</div>
56
				</div>
57
			</li>
58
		</ul>
59
	</div>
60
</div>
61
</div>
62
63
</body>
64
</html>

+ 69 - 22
display-server/web/template/webapp/plugin/YunbaPush.html

@ -1,11 +1,30 @@
1 1
<!DOCTYPE HTML>
2 2
<html class="s_bs">
3 3
<head>
4
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>云巴推送</title>
7
	{%>template/common/Head.html%}
8
	<script type="text/javascript" src="biz/js/push/YunbaPush.js"></script>
4
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
<title>云巴推送</title>
7
{%>template/common/Head.html%}
8
<script type="text/javascript" src="biz/js/more/push/YunbaPush.js"></script>
9
<style>
10
#send {
11
	background: #0085d0;
12
    color: white;
13
}
14
#logoutWrap .user-info-wrap {
15
	text-align: center;
16
	padding: 0.1rem;
17
}
18
#logoutWrap .user-info-wrap .user-logo {
19
	width: 0.4rem;
20
}
21
#logoutWrap .user-info-wrap .user-alias {
22
	font-size: 0.22rem;
23
    line-height: 0.4rem;
24
    margin-left: 0.12rem;
25
    color: #4489ac;
26
}
27
</style>
9 28
</head>
10 29
<body>
11 30
<div class="c_navBar">
@ -17,43 +36,71 @@
17 36
	</div>
18 37
</div>
19 38

20
<div class="c_list">
39
<div class="c_list" id="registerWrap">
21 40
	<ul>
22
		<li ontap=";">
41
		<li>
23 42
			<div class="content">
24
				
43
				<div class="value"><input type="text" class="e_left" id="alias" placeholder="昵称" /></div>
44
				<div class="fn fn-2" id="register">连接</div>
25 45
			</div>
26 46
		</li>
27 47
	</ul>
28 48
</div>
29
<div class="c_list">
49

50
<div class="fn-hide" id="main">
51
<div class="c_list" id="logoutWrap">
30 52
	<ul>
31 53
		<li>
32 54
			<div class="content">
33
				<div class="value"><input type="text" class="e_left" id="alias" placeholder="昵称[字母/数字/下划线]" /></div>
34
				<div class="fn fn-2" id="register">连接</div>
55
				<div class="value user-info-wrap">
56
					<img src="biz/img/temp/male.png" alt="" class="user-logo"/>
57
					<span class="info user-alias"></span>
58
				</div>
59
				<div class="fn fn-2" id="logout">注销</div>
35 60
			</div>
36 61
		</li>
37 62
	</ul>
38 63
</div>
39
<div class="c_list">
64
<div class="c_scroll c_scroll-fixed" style="top:1.2rem; bottom:0.6rem;" id="content">
65
	<div class="wrapper">
66
		<div class="c_chat" id="chatContent">
67
			
68
		</div>
69
	</div>
70
</div>
71
<div class="c_list e_fix-bottom">
40 72
	<ul>
41 73
		<li>
42 74
			<div class="content">
43
				<div class="value"><input type="text" class="e_left" id="msgForSend" placeholder="发送信息" /></div>
44
				<div class="fn fn-2" id="send">发送</div>
45
			</div>
46
		</li>
47
		<li>
48
			<div class="content">
49
				<div id="msgForReceive" style="background-color:gray;color:white;height:190px;overflow-x:auto;overflow-y:auto;" class="panel panel-default col-sm-7 col-sm-offset-2">
50
					
51
				</div>
75
				<div class="value"><input type="text" class="e_left" id="msgInfo" placeholder="请输入文字" /></div>
76
				<div class="fn fn-4" id="send">发送消息</div>
52 77
			</div>
53 78
		</li>
54 79
	</ul>
55 80
</div>
56
<div class="c_scroll c_scroll-mix c_scroll-fixed l_padding" style="top:2.22rem; bottom:0;" id="content">
57 81
</div>
82

83
<textarea class="fn-hide" id="T_myChat">
84
	<div class="i">
85
		<div class="head"><img src="biz/img/temp/male.png" alt="" /></div>
86
		<div class="dialog">
87
			<div class="info">{{ALIAS}}</div>
88
			<div class="content">
89
				{{MSG}}
90
			</div>
91
		</div>
92
	</div>
93
</textarea>
94
<textarea class="fn-hide" id="T_othersChat">
95
	<div class="u">
96
		<div class="head"><img src="biz/img/temp/female.png" alt="" /></div>
97
		<div class="dialog">
98
			<div class="info">{{ALIAS}}</div>
99
			<div class="content">
100
				{{MSG}}
101
			</div>
102
		</div>
103
	</div>
104
</textarea>
58 105
</body>
59 106
</html>

+ 0 - 1
display-server/web/template/webapp/tag/WmTabbar.html

@ -5,7 +5,6 @@
5 5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6 6
	<title>WmTabbar演示</title>
7 7
	{%>template/common/Head.html%}
8
	<link href="biz/css/project.css" rel="stylesheet" type="text/css" />
9 8
	<script type="text/javascript" src="biz/js/tag/WmTabbar.js"></script>
10 9
</head>
11 10
<body>

+ 0 - 1
display-server/web/template/webapp/tag/WmTabbarSrc.html

@ -6,7 +6,6 @@
6 6
	content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
7 7
<title>导航</title>
8 8
{%>template/common/Head.html%}
9
<link href="biz/css/project.css" rel="stylesheet" type="text/css" />
10 9
<script type="text/javascript" src="biz/js/tag/WmTabbar.js"></script>
11 10
</head>
12 11
<body>

+ 2 - 2
display-server/web/template/webapp/ui/Button.html

@ -31,13 +31,13 @@
31 31
				<span class="e_button" id="dropbutton">下拉菜单1<span class="e_ico-unfold"></span></span>
32 32
			</div>
33 33
		</div>
34
		<div class="c_title" style="background:#ddd;">
34
		<div class="c_title" style="background:#ccc;">
35 35
			<div class="text">标题中的按钮(下拉菜单2)</div>
36 36
			<div class="fn">
37 37
				<span class="e_button" id="dropbutton2">下拉菜单2<span class="e_ico-unfold"></span></span>
38 38
			</div>
39 39
		</div>
40
		<div class="c_title">
40
		<div class="c_title" style="background:#ddd;">
41 41
			<div class="text">独立图标按钮(独立图标)</div>
42 42
			<div class="fn"><span class="e_button e_button-singleIco" id="icon_button" ontap=";"><span class="e_ico-add"></span></span></div>
43 43
		</div>

+ 1 - 1
display-server/web/template/webapp/ui/Form.html

@ -32,7 +32,7 @@
32 32
			<li tapfor="input-search">
33 33
				<label class="content">
34 34
					<div class="label">搜索框</div>
35
					<div class="value"><input type="text" placeholder="名称/编号" id="input-search"/></div>
35
					<div class="value"><input type="text" placeholder="请输入文字" id="input-search"/></div>
36 36
				</label>
37 37
			</li>
38 38
			<li tapfor="input-textarea">

+ 0 - 1
display-server/web/template/webapp/ui/Gesture.html

@ -5,7 +5,6 @@
5 5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6 6
	<title>Button组件</title>
7 7
	{%>template/common/Head.html%}
8
	<link href="biz/css/project.css" rel="stylesheet" type="text/css" />
9 8
	<script type="text/javascript" src="biz/js/ui/gesture.js"></script>
10 9
</head>
11 10
<body>

+ 191 - 0
display-server/web/template/webapp/ui/Hammer.html

@ -0,0 +1,191 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
<title>Hammer</title>
7
{%>template/common/Head.html%}
8
<script type="text/javascript" src="biz/js/ui/hammer.js"></script>
9
</head>
10
<style type="text/css">
11
.hammer-wrap {
12
	text-align: center;
13
	margin-top: 0.22rem;
14
}
15
.hammer-wrap .hammer-icon {
16
	width: 1rem;
17
}
18
.hammer-wrap h1 {
19
	margin-top: 0.22rem;
20
}
21
.hammer-wrap h2 {
22
	font-weight: normal;
23
    line-height: 1.4;
24
}
25
.demo-box-wrap {
26
  border: 1px solid #333;
27
  /* font-family: sans-serif; */
28
  background: #333;
29
  text-align: center;
30
  color: white;
31
  width: 302px;
32
  margin-left: auto;
33
  margin-right: auto;
34
  margin-bottom: 3em;
35
}
36
.demo-box-wrap .demo-box {
37
  width: 300px;
38
  height: 200px;
39
  overflow: hidden;
40
  position: relative;
41
}
42
.demo-box-wrap .demo-box > img {
43
  height: 400px;
44
  width: 1900px;
45
  position: absolute;
46
  margin-left: -950px;
47
  display: none;
48
  pointer-events: none;
49
  margin-top: -220px;
50
  left: 50%;
51
  top: 50%;
52
  max-width: none;
53
}
54
.demo-box-wrap h2 {
55
  pointer-events: none;
56
  color: white;
57
}
58
.demo-box-wrap .demo-box img.active {
59
  display: block;
60
}
61
.demo-overlay {
62
    position: absolute;
63
    top: 0;
64
    left: 0;
65
    right: 0;
66
    bottom: 0;
67
    background: rgba(70, 70, 70, 0.8);
68
    display: none;
69
}
70
.demo-overlay img {
71
    width: 50px;
72
    height: 50px;
73
    position: absolute;
74
    top: 50%;
75
    left: 50%;
76
    margin-left: -25px;
77
    margin-top: -25px;
78
}
79
</style>
80
<body>
81
<div class="c_navBar">
82
	<div class="left">
83
		<div class="back">
84
			<span class="e_ico-back"></span><span class="text">手势</span>
85
		</div>
86
	</div>
87
</div>
88

89
<div class="m_content" id="content">
90
<div>
91
	<div class="hammer-wrap">
92
		<img src="biz/img/plugin/hammer/tap.png" class="hammer-icon">
93
		<h1>Try it!</h1>
94
		<h2 class="desc">你可以尝试单点图片,实现图片的切换</h2>
95
		<div class="row">
96
			<div class="column large-4 medium-6 small-12">
97
				<div class="demo-box-wrap">
98
					<h2>单点</h2>
99
					<div class="demo-box tap" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
100
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
101
						<img src="biz/img/plugin/hammer/pano_2.jpg">
102
						<img src="biz/img/plugin/hammer/pano_3.jpg">
103
					</div>
104
				</div>
105
			</div>
106
		</div>
107
	</div>
108
	<div class="hammer-wrap">
109
		<img src="biz/img/plugin/hammer/press.png" class="hammer-icon">
110
		<h1>Try it!</h1>
111
		<h2 class="desc">您可以尝试按住图片,选中图片/取消选中</h2>
112
		<div class="row">
113
			<div class="column large-4 medium-6 small-12">
114
				<div class="demo-box-wrap">
115
				  	<h2>按住</h2>
116
					<div class="demo-box press" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
117
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
118
					 	<div class="demo-overlay">
119
							<img src="biz/img/plugin/hammer/circle-check.svg">
120
						</div>
121
					</div>
122
				</div>
123
			</div>
124
		</div>
125
	</div>
126
	<div class="hammer-wrap">
127
		<img src="biz/img/plugin/hammer/pan.png" class="hammer-icon">
128
		<h1>Try it!</h1>
129
		<h2 class="desc">您可以尝试平移图片,查看图片更多</h2>
130
		<div class="row">
131
			<div class="column large-4 medium-6 small-12">
132
				<div class="demo-box-wrap">
133
					<h2>平移</h2>
134
					<div class="demo-box pan" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
135
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
136
					</div>
137
				</div>
138
			</div>
139
		</div>
140
	</div>
141
	<div class="hammer-wrap">
142
		<img src="biz/img/plugin/hammer/swipe.png" class="hammer-icon">
143
		<h1>Try it!</h1>
144
		<h2 class="desc">您可以尝试左右滑动,实现图片的切换</h2>
145
		<div class="row">
146
			<div class="column large-4 medium-6 small-12">
147
				<div class="demo-box-wrap">
148
					<h2>滑动</h2>
149
					<div class="demo-box swipe" style="touch-action: pan-y; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
150
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg">
151
						<img src="biz/img/plugin/hammer/pano_2.jpg">
152
						<img src="biz/img/plugin/hammer/pano_3.jpg">
153
					</div>
154
				</div>
155
			</div>
156
		</div>
157
	</div>
158
	<div class="hammer-wrap">
159
		<img src="biz/img/plugin/hammer/rotate.png" class="hammer-icon">
160
		<h1>Try it!</h1>
161
		<h2 class="desc">您可以尝试旋转,实现图片的旋转</h2>
162
		<div class="row">
163
			<div class="column large-4 medium-6 small-12">
164
				<div class="demo-box-wrap">
165
					<h2>旋转</h2>
166
					<div class="demo-box rotate" style="touch-action: none; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
167
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg" style="transform: rotate(-2deg);">
168
					</div>
169
				</div>
170
			</div>
171
		</div>
172
	</div>
173
	<div class="hammer-wrap">
174
		<img src="biz/img/plugin/hammer/pinch.png" class="hammer-icon">
175
		<h1>Try it!</h1>
176
		<h2 class="desc">您可以尝试捏放,实现图片的放大/缩小</h2>
177
		<div class="row">
178
			<div class="column large-4 medium-6 small-12">
179
				<div class="demo-box-wrap">
180
					<h2>捏放</h2>
181
					<div class="demo-box pinch" style="touch-action: none; -webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
182
						<img class="active" src="biz/img/plugin/hammer/pano_1.jpg" style="width: 2269.85px; margin-left: -1134.93px; height: 477.864px; margin-top: -262.825px;">
183
					</div>
184
				</div>
185
			</div>
186
		</div>
187
	</div>
188
</div>
189
</div>
190
</body>
191
</html>

+ 0 - 30
display-server/web/template/webapp/ui/HammerDemo.html

@ -1,30 +0,0 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
	<meta charset="utf-8" />
5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>Button组件</title>
7
	{%>template/common/Head.html%}
8
	<link href="biz/css/project.css" rel="stylesheet" type="text/css" />
9
	<script type="text/javascript" src="biz/js/ui/hammer-demo.js"></script>
10
</head>
11
<body>
12

13
<div class="c_navBar">
14
	<div class="left">
15
		<div class="back">
16
			<span class="e_ico-back"></span>
17
			<span class="text">back</span>
18
		</div>
19
	</div>
20
</div>
21

22
<div class="m_content m_content-nofooter" id="content">
23
	<div>手势类型:单击、双击、长按、滑动、左滑、右滑、上滑、下滑</div>
24
	<br>
25
	<br>
26
	<div id="gestureBlock" style="width:200px;height:200px;background:red;margin:20px;">手势操作区域</div>
27
	<div id="msg"></div>
28
</div>
29
</body>
30
</html>

+ 0 - 65
display-server/web/template/webapp/ui/Refresh.html

@ -1,65 +0,0 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
	<meta charset="utf-8" />
5
	<meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>下拉刷新</title>
7
	{%>template/common/Head.html%}
8
	<script type="text/javascript" src="biz/js/ui/ui.js"></script>
9
</head>
10
<body>
11

12
<div class="c_navBar">
13
	<div class="left">
14
		<div class="back">
15
			<span class="e_ico-back"></span>
16
			<span class="text">下拉刷新组件</span>
17
		</div>
18
	</div>
19
</div>
20

21
<div class="m_content" id="refresh">
22
	<div id="wrapper">
23
		<div id="scroller">
24
			<div id="pullDown">
25
				<span class="pullDownIcon"></span><span class="pullDownLabel">下拉刷新...</span>
26
			</div>
27
			<div class="c_list">
28
				<ul class="ul" id="thelist">
29
					<li class="li">
30
						<div class="content">
31
							<div class="main">
32
								<div class="title">动感网聊09</div>
33
								<div class="detail">有效期:2011.10.1-2012.10.01</div>
34
							</div>
35
							<div class="info">120.0 元</div>
36
							<div class="ico"></div>
37
						</div>
38
						<div class="more more-list">
39
							<ul>
40
								<li>
41
									<div class="main">基础资费套餐费</div>
42
									<div class="info">15.00 元</div>
43
								</li>
44
								<li>
45
									<div class="main">月使用费</div>
46
									<div class="info">20.00 元</div>
47
								</li>
48

49
							</ul>
50
						</div>
51
					</li>
52

53
				</ul>
54
			</div>
55
			<!-- 
56
		<div id="pullUp">
57
			<span class="pullUpIcon"></span><span class="pullUpLabel">上拉加载更多...</span>
58
		</div>
59
		 -->
60
		</div>
61
	</div>
62
</div>
63

64
</body>
65
</html>

+ 1 - 2
ipu-count-test/src/com/ai/ipu/count/test/TestApplication.java

@ -8,8 +8,7 @@ public class TestApplication extends Application {
8 8
	@Override
9 9
	public void onCreate() {
10 10
		super.onCreate();
11
		//移到IpuReport的initiate方法中
12
//		IpuCrashHandler.getInstance().init(getApplicationContext());
11
		//移到IpuReport的init方法中
13 12
        IpuCount.init(this,"127.0.0.1",6001);
14 13
        IpuCount.setLoggingEnable(true);
15 14
	}

BIN
wade-mobile-common/res/drawable-ldpi/map_click.png


BIN
wade-mobile-common/res/drawable-ldpi/map_end.png


BIN
wade-mobile-common/res/drawable-ldpi/map_local.png


BIN
wade-mobile-common/res/drawable-ldpi/map_other.png


BIN
wade-mobile-common/res/drawable-ldpi/map_self.png


BIN
wade-mobile-common/res/drawable-ldpi/map_start.png


BIN
wade-mobile-common/res/drawable-ldpi/map_target.png


BIN
wade-mobile-common/res/drawable-mdpi/map_bubble_ok_icon.png


BIN
wade-mobile-common/res/drawable-xhdpi/map_arrow.png


+ 0 - 7
wade-mobile-common/res/drawable/map_info_window_bg.xml

@ -1,7 +0,0 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
3
    <!-- 中间的背景色 -->
4
    <solid android:color="#000000"/>
5
    <!-- 设置四个角的角度 -->
6
   <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp"/>
7
</shape>

+ 0 - 7
wade-mobile-common/res/drawable/map_info_window_btn_bg.xml

@ -1,7 +0,0 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
3
    <!-- 中间的背景色 -->
4
    <solid android:color="#0066CC"/>
5
    <!-- 设置四个角的角度 -->
6
   <corners android:topRightRadius="10dp"  android:bottomRightRadius="10dp"/>
7
</shape>

+ 0 - 65
wade-mobile-common/res/layout/map_custom_info_window.xml

@ -1,65 +0,0 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
    android:layout_width="wrap_content"
4
    android:layout_height="wrap_content"
5
    android:background="@android:color/transparent"
6
    android:orientation="vertical" >
7

8
    <LinearLayout
9
        android:id="@+id/map_layout"
10
        android:layout_width="wrap_content"
11
        android:layout_height="wrap_content"
12
        android:background="@drawable/map_info_window_bg"
13
        android:gravity="center_vertical"
14
        android:orientation="horizontal" >
15

16
        <LinearLayout
17
            android:id="@+id/map_content"
18
            android:layout_width="wrap_content"
19
            android:layout_height="wrap_content"
20
            android:gravity="center_vertical|left"
21
            android:orientation="vertical"
22
            android:padding="10dp"
23
             >
24

25
            <TextView
26
                android:id="@+id/map_title"
27
                android:layout_width="wrap_content"
28
                android:layout_height="wrap_content"
29
                android:singleLine="false"
30
                android:textColor="#FFFFFFFF"
31
                android:textSize="18sp" />
32

33
            <TextView
34
                android:id="@+id/map_snippet"
35
                android:layout_width="wrap_content"
36
                android:layout_height="wrap_content"
37
                android:singleLine="false"
38
                android:textColor="#FFB3B3B3"
39
                android:textSize="12sp" />
40
        </LinearLayout>
41

42
        <View
43
            android:layout_width="1px"
44
            android:layout_height="match_parent"
45
            android:layout_gravity="center_horizontal"
46
            android:background="#66CCFF"
47
            android:id="@+id/map_line"
48
             />
49

50
        <ImageView
51
            android:id="@+id/mapComfirmBtn"
52
            android:layout_width="wrap_content"
53
            android:layout_height="match_parent"
54
            android:src="@drawable/map_bubble_ok_icon"
55
            android:paddingLeft="5dp"
56
            android:paddingRight="5dp"
57
             />
58
    </LinearLayout>
59

60
    <ImageView
61
        android:layout_width="match_parent"
62
        android:layout_height="match_parent"
63
        android:src="@drawable/map_arrow" />
64

65
</LinearLayout>

+ 0 - 113
wade-mobile-common/res/values/strings_map.xml

@ -1,113 +0,0 @@
1
<?xml version="1.0" encoding="utf-8"?>
2
<resources>
3
    <string name="action_settings">Settings</string>
4
    
5
    <string name="animate">Animate</string>
6
    <string name="basic_map">基本地图</string>
7
    <string name="basic_description">介绍如何创建一个基本地图</string>
8
    <string name="camera_demo">Camera功能</string>
9
    <string name="camera_description">介绍在地图中操作Camera各种功能</string>
10
    <string name="clear_map">Clear</string>
11
    <string name="compass">指南针</string>
12
    <string name="custom_info_contents">Custom info contents</string>
13
    <string name="custom_info_window">Custom info window</string>
14
    <string name="default_info_window">Default info window</string>
15
    <string name="demo_title">AMaps2D  Demos</string>
16
    <string name="down_arrow">\u2193</string>
17
    <string name="drag_melbourne">Drag Melbourne</string>
18
    <string name="events_demo">Events功能</string>
19
    <string name="events_description">介绍对地图的点击,长按,拖动地图事件功能</string>
20
    <string name="fill_stroke">Fill Stroke</string>
21
    <string name="fill_color">Fill Color</string>
22
    <string name="go_to_zhongguancun">中关村</string>
23
    <string name="go_to_lujiazui">陆家嘴</string>
24
    <string name="hybrid">Hybrid</string>
25
    <string name="location">正在定位中</string>
26
27
    <string-array name="layers_array">
28
        <item>@string/normal</item>
29
        <item>@string/satellite</item>
30
    </string-array>
31
32
    <string name="layers_demo">Layers图层功能</string>
33
    <string name="layers_description">介绍地图分别以正常、卫星模式展示出</string>
34
    <string name="left_arrow">\u2190</string>
35
    <string name="locationsource_demo">Location小蓝点功能</string>
36
    <string name="locationsource_description">介绍对系统定位显示小蓝点功能</string>
37
    <string name="locationGPS_demo">gps定位功能</string>
38
    <string name="locationGPS_description">介绍如何使用gps定位</string>
39
     <string name="locationSensorGPS_demo">gps追随功能</string>
40
      <string name="locationSensorGPS_demo_description">介绍如何用gps定位图标箭头随手机转动而转动</string>
41
    <string name="locationNetwork_description">介绍如何使用网络定位</string>
42
    <string name="locationNetwork_demo">网络定位功能</string>
43
    <string name="marker_demo">Markers功能</string>
44
    <string name="marker_description">介绍在地图上添加marker和infoWindow</string>
45
    <string name="mapOption_demo">AMapOptions实现地图</string>
46
    <string name="mapOption_description">介绍用AMapOptions展示一个地图</string>
47
    <string name="map_not_ready">SupportMapFragment初始化失败</string>
48
    <string name="move_the_camera">移动camera</string>
49
    <string name="my_location">My Location</string>
50
    <string name="mylocation_layer">我的位置图层</string>
51
    <string name="no_demos">No demos</string>
52
    <string name="normal">Normal</string>
53
    <string name="polygon_demo">Polygons功能</string>
54
    <string name="polygon_description">介绍在地图绘制多边形</string>
55
    <string name="polyline_demo">Polylines功能</string>
56
    <string name="polyline_description">介绍在地图中绘制线条</string>
57
    <string name="groundoverlay_demo">GroundOverlay功能</string>
58
    <string name="groundoverlay_description">介绍在地图中绘制GroundOverlay功能</string>
59
    <string name="tileoverlay_demo">TileOverlay功能</string>
60
    <string name="tileoverlay_description">介绍在地图中绘制TileOverlay功能</string>
61
    <string name="circle_demo">Circles功能</string>
62
    <string name="circle_description">介绍在地图中绘制圆形</string>
63
    <string name="screenshot_demo">地图截屏功能</string>
64
    <string name="screenshot_description">介绍对地图进行截屏</string>
65
    <string name="properties_polyline">设置Polyline属性</string>
66
    <string name="properties_polygon">设置Polygon属性</string>
67
    <string name="properties_circle">设置Circle属性</string>
68
    <string name="busline_demo">Busline公交查询</string>
69
    <string name="busline_description">介绍如何在地图中绘制BusLine</string>
70
    <string name="route_demo">Route路径规划</string>
71
    <string name="route_description">介绍如何在地图中绘制Route</string>
72
    <string name="rotate">旋转手势</string>
73
    <string name="reset_map">Reset</string>
74
    <string name="right_arrow">\u2192</string>
75
    <string name="satellite">Satellite</string>
76
    <string name="scroll">滑动手势</string>
77
    <string name="stop_animation">\u25A0</string>
78
    <string name="stroke_width">Stroke Width</string>
79
    <string name="tap_instructions">点击或者长按地图</string>
80
    <string name="terrain">Terrain</string>
81
    <string name="tilt">倾斜手势</string>
82
    <string name="traffic">Traffic</string>
83
    <string name="transparency">Transparency</string>
84
    <string name="uisettings_demo">UI Settings功能</string>
85
    <string name="uisettings_description">介绍地图中UI Settings功能</string>
86
    <string name="geocoder_demo">地理编码 功能</string>
87
    <string name="geocoder_description">介绍 geocoder地理编码 功能</string>
88
    <string name="poikeywordsearch_demo">poi关键字搜索</string>
89
    <string name="poikeywordsearch_description">介绍poi关键字搜索功能</string>
90
    <string name="poiaroundsearch_demo">poi周边搜索</string>
91
    <string name="poiaroundsearch_description">介绍poi周边搜索功能</string>
92
    <string name="offlinemap_demo">离线地图功能</string>
93
    <string name="offlinemap_description">介绍如何使用离线地图</string>
94
    <string name="search_title">搜索关键字</string>
95
    <string name="up_arrow">\u2191</string>
96
    <string name="width">Width</string>
97
    <string name="zoom_buttons">缩放按钮</string>
98
    <string name="zoom_gestures">缩放手势</string>
99
    <string name="zoom_in">+</string>
100
    <string name="zoom_out">-</string>
101
    <string name="scale">比例尺</string>
102
    <string name="buttonScale">获取比例尺</string>
103
    <string name="logo_position">logo位置</string>
104
    <string name="bottom_left">左下</string>
105
    <string name="bottom_center">底部居中</string>
106
    <string name="bottom_right">右下</string>
107
    <string name="map_screenshot">地图截屏</string>
108
    <string name="error_network">搜索失败,请检查网络连接!</string>
109
    <string name="error_key">key验证无效!</string>
110
    <string name="error_other">未知错误,请稍后重试!错误码为</string>
111
    <string name="no_result">对不起,没有搜索到相关数据!</string>
112

113
</resources>

BIN
wade-mobile-lib/libs/AMap_2DMap_V2.9.0_20160525.jar


BIN
wade-mobile-lib/libs/Android_Map_V2.2.0.jar


BIN
wade-mobile-lib/libs/umeng-analytics-v6.0.1.jar


提交project.properties · 2780da9ace - Nuosi Git Service
Sfoglia il codice sorgente

提交project.properties

leijie 8 anni fa
parent
commit
2780da9ace
1 ha cambiato i file con 0 aggiunte e 1 eliminazioni
  1. 0 1
      ipu-alertdialog/project.properties

+ 0 - 1
ipu-alertdialog/project.properties

@ -13,4 +13,3 @@
13 13
# Project target.
14 14
target=android-22
15 15
android.library=true
16
android.library.reference.1=../wade-mobile-common