Эх сурвалжийг харах

Merge branch 'developer' of https://gitlab.com/Arisono/SkWeiChat-Baidu into uu_v1.0

Arison 8 жил өмнө
parent
commit
680e45a283
99 өөрчлөгдсөн 3073 нэмэгдсэн , 246 устгасан
  1. 31 0
      WeiChat/src/main/assets/submit.css
  2. 171 0
      WeiChat/src/main/assets/submit.html
  3. 7 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/CaptureResultActivity.java
  4. 21 8
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java
  5. 46 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/DataInquiryActivity.java
  6. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/DataInquiryListActivity.java
  7. 5 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/ReportQueryCriteriaActivity.java
  8. 48 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/ReportStatisticsActivity.java
  9. 14 20
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/ViewUtil.java
  10. 0 67
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/NestingScrollview.java
  11. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/OAHttpUtil.java
  12. 1 0
      WeiChat/src/main/res/layout/activity_data_inquiry.xml
  13. 5 9
      WeiChat/src/main/res/layout/activity_expense_reimbursement.xml
  14. 0 4
      WeiChat/src/main/res/layout/expense_details_table_item.xml
  15. 1 0
      WeiChat/src/main/res/layout/simple_calculator_ppview.xml
  16. 12 0
      WeiChat/src/main/res/menu/menu_uusport_list.xml
  17. 1 0
      app_core/common/build.gradle
  18. 0 1
      app_core/common/src/main/java/com/core/utils/CommonInterface.java
  19. 2 0
      app_core/common/src/main/java/com/core/xmpp/XChatManager.java
  20. 2 1
      app_core/common/src/main/res/layout/act_taskerp_add.xml
  21. 0 4
      app_core/common/src/main/res/layout/activity_expense_reimbursement.xml
  22. 1 4
      app_core/common/src/main/res/layout/expense_details_table_item.xml
  23. 1 0
      app_core/common/src/main/res/layout/simple_calculator_ppview.xml
  24. 12 0
      app_core/common/src/main/res/menu/menu_uusport_list.xml
  25. 1 1
      app_core/common/src/main/res/values/styles.xml
  26. 2 0
      app_modular/appme/src/main/AndroidManifest.xml
  27. 76 0
      app_modular/appme/src/main/java/com/uas/appme/pedometer/adapter/UUAttentionAdapter.java
  28. 77 0
      app_modular/appme/src/main/java/com/uas/appme/pedometer/adapter/UURankingAdapter.java
  29. 12 0
      app_modular/appme/src/main/java/com/uas/appme/pedometer/view/NewStepActivity.java
  30. 106 0
      app_modular/appme/src/main/java/com/uas/appme/pedometer/view/UURanking.java
  31. 80 0
      app_modular/appme/src/main/res/layout/item_uuattention.xml
  32. 82 0
      app_modular/appme/src/main/res/layout/item_uuranking.xml
  33. 151 0
      app_modular/appme/src/main/res/layout/uu_ranking_activity.xml
  34. 21 24
      app_modular/appmessages/src/main/java/com/modular/appmessages/activity/MessageWebActivity.java
  35. 3 2
      app_modular/appmessages/src/main/java/com/modular/appmessages/activity/UUHelperActivity.java
  36. 1 1
      app_modular/appmessages/src/main/java/com/modular/appmessages/adapter/UUHelperAdapter.java
  37. 1 1
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  38. 34 7
      app_modular/appmessages/src/main/res/layout/activity_message_web.xml
  39. 2 1
      app_modular/appmessages/src/main/res/layout/activity_uuhelper.xml
  40. 1 1
      app_modular/appmessages/src/main/res/layout/activity_uuhelper_details.xml
  41. 9 9
      app_modular/appmessages/src/main/res/layout/item_uuhelper_single.xml
  42. 6 6
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/BusinessStateActivity.java
  43. 22 5
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/TaskAddErpActivity.java
  44. 20 3
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/adapter/SelectAimAdapter.java
  45. 8 7
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/presenter/SelectAimPresenter.java
  46. 29 20
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/AddMeetingActivity.java
  47. 12 10
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/ExpenseReimbursementActivity.java
  48. 0 1
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkDailyAddActivity.java
  49. 0 4
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/WorkDailyAdapter.java
  50. 1 0
      app_third/recyclerlibrary/.gitignore
  51. 24 0
      app_third/recyclerlibrary/build.gradle
  52. 25 0
      app_third/recyclerlibrary/proguard-rules.pro
  53. 10 0
      app_third/recyclerlibrary/src/main/AndroidManifest.xml
  54. 3 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/REMAIN.md
  55. 65 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/adapter/BaseRecycAdapter.java
  56. 63 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/listener/OnRecyclerClickLister.java
  57. 50 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/listener/OnRecyclerItemClickListener.java
  58. 51 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/listener/OnRecyclerLongItemClickLister.java
  59. 90 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/model/BaseModel.java
  60. 533 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/BaseRefreshLayout.java
  61. 36 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/BaseRefreshView.java
  62. 56 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/simlpe/SimpleRefreshFooter.java
  63. 61 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/simlpe/SimpleRefreshHeader.java
  64. 30 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/simlpe/SimpleRefreshLayout.java
  65. 156 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/EatBeanLoadingView.java
  66. 283 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/GhostLoadingView.java
  67. 61 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/SmartRefreshFooter.java
  68. 61 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/SmartRefreshHeader.java
  69. 29 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/SmartRefreshLayout.java
  70. 33 0
      app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/webempty/EmptyRefreshLayout.java
  71. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_01.png
  72. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_02.png
  73. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_03.png
  74. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_04.png
  75. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_05.png
  76. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_06.png
  77. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_07.png
  78. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_08.png
  79. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_09.png
  80. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_10.png
  81. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_11.png
  82. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_12.png
  83. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/pull_down.png
  84. BIN
      app_third/recyclerlibrary/src/main/res/drawable-hdpi/pull_up.png
  85. BIN
      app_third/recyclerlibrary/src/main/res/drawable-xhdpi/pull_down.png
  86. BIN
      app_third/recyclerlibrary/src/main/res/drawable-xhdpi/pull_up.png
  87. BIN
      app_third/recyclerlibrary/src/main/res/drawable-xxhdpi/pull_down.png
  88. BIN
      app_third/recyclerlibrary/src/main/res/drawable-xxhdpi/pull_up.png
  89. 40 0
      app_third/recyclerlibrary/src/main/res/drawable/progress_round.xml
  90. 28 0
      app_third/recyclerlibrary/src/main/res/layout/refresh_footer.xml
  91. 34 0
      app_third/recyclerlibrary/src/main/res/layout/refresh_header.xml
  92. 36 0
      app_third/recyclerlibrary/src/main/res/layout/refresh_smart_footer.xml
  93. 38 0
      app_third/recyclerlibrary/src/main/res/layout/refresh_smart_header.xml
  94. 10 0
      app_third/recyclerlibrary/src/main/res/values/attr.xml
  95. 4 0
      app_third/recyclerlibrary/src/main/res/values/color.xml
  96. 6 0
      app_third/recyclerlibrary/src/main/res/values/dimens.xml
  97. 10 0
      app_third/recyclerlibrary/src/main/res/values/strings.xml
  98. 4 2
      settings.gradle
  99. 2 2
      version.gradle

+ 31 - 0
WeiChat/src/main/assets/submit.css

@@ -0,0 +1,31 @@
+	#sub{
+		width:120px;height:50px;line-height:10px; no-repeat;
+		border-radius:10px;
+		background:#3399FF;color:#fff;
+		font-size:16px;
+		}
+		
+	.td1cls{
+		width:90px;
+		align:left;
+		font-size:16px;
+		font-weight:bold;		
+	}
+	
+	.inputcls{	
+		width:220px; 
+		type:text;
+		border-radius:8px;
+		height:1.7em;
+	}
+	.textareacls{
+		width:220px;
+		cols:50;
+		border-radius:8px;
+	}
+	.divcls{
+		padding-left:20px;
+		margin-right:40pt;
+		margin-bottom:120%;
+		margin-left:auto;
+	}

+ 171 - 0
WeiChat/src/main/assets/submit.html

@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html >
+<head>
+<meta  http-equiv = 'refresh' charset="UTF-8" name="viewport"
+	 content="width=device-width,initial-scale=1.0,user-scalable=0, 
+	 maximum-scale=1.0, minimum-scale=1.0, user-scalable=0, width=device-width"/>
+<link rel="stylesheet" href="weui.min.css"/>
+<script src="jquery-1.8.2.min.js"></script>
+<title>submit</title>
+<!--
+表单标签: 表单标签的作用是用于提交数据给服务器的。
+
+    表单标签的根标签是<form>标签
+
+常用的属性:
+	action: 该属性是用于指定提交数据的地址。
+	method: 指定表单的提交方式。
+    		get : 默认使用的提交方式。  提交的数据会显示在地址栏上。
+            post :  提交的数据不会显示在地址栏上。
+
+注意: 表单项的数据如果需要提交到服务器上面,那么表单项必须要有name的属性值。
+-->
+
+
+	<!--JS交互本地测试html文件  可在submit SaveValue()方法中调用本地原生方法,成功后让后端人员调用该方法即可以了-->
+<link href="submit.css" rel="stylesheet">
+</head>
+<body padding-bottom="20px">
+<span style="font-size:18px">
+	<form  id="form" action="http://218.17.158.219:8090/ERP/common/saveCommon.action?caller=SubsApply&formStore"  
+			method="post" enctype="application/json">
+	
+    	<table border="0px" align="center" cellpadding="5px" cellspacing="0px">
+				<tr>
+					<td class="td1cls" valign="top">采购单分析</td>
+					<td>					
+						<textarea class="textareacls" name="analysis" id="subinfo" rows="3" onmousedown="s(event,this)"></textarea>
+					</td>
+				</tr>
+				<tr>
+					<td class="td1cls">单据日期</td>
+					
+					<td >
+						<input class="inputcls"name="logOutTime" id="logOutTime"   onclick="hitest"/>
+                        <span id=""></span>
+					</td>
+				</tr>
+				
+				<tr>
+					<td class="td1cls">单据状态</td>
+					<td>
+						<input class="inputcls" name="Apply_State" id="Apply_State" value = "在录入" readonly="readonly"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="td1cls" >申请人</td>
+					<td>
+						<input class="inputcls" name="Applicant" id="Applicant" value=""/> 
+					</td>
+				</tr>
+				<tr>
+					<td class="td1cls" >申请人岗位</td>
+					<td>
+						<input  class="inputcls" name="Apply_Job"  id = "Apply_Job"/>
+						
+					</td>
+				</tr>
+				<tr>
+					<td class="td1cls" >申请部门</td>
+					<td>
+						<input class="inputcls" name="Apply_Department" id="Apply_Department"/>
+						
+					</td>
+				</tr>
+				<tr>
+					<td class="td1cls" valign="top" onfocus="textfocus(this)" onblur="textblur(this)" id="Apply_Reason">申请原因</td>
+					<td>	
+						<textarea   placeholder="请输入,限150字..." class="textareacls" rows="7"   maxlength="150" id="Apply_Reason" required></textarea>
+					</td>
+				</tr>
+	
+				<tr>
+					<td colspan="2" rowspan="2" align="center">
+						<input  id="sub" type="submit"  name="提交申请" value="提交申请" onclick="SaveValue()"/>
+					</td>
+				</tr>
+		</table>
+    </form>
+	</span>
+	
+	<!--申请单显示-->
+	<span style="font-size:18px;">
+	<script type="text/javascript">    
+		<span style="white-space:pre">  </span>	$.getJSON(URL,param,function(data){
+		<span style="white-space:pre">  </span>	alert(data.type);
+		<span style="white-space:pre">  </span>	$("form").setForm(data);
+		});
+	</script>
+	</span>
+</body>
+
+	
+	<!--单据基本信息显示-->
+	<script type="text/javascript">
+		var t=document.getElementById("logOutTime"); 
+		d=new Date(); 
+		t.value=d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate(); 
+	</script>
+
+	<!--申请单保存至本地-->
+	<script type="text/javascript">
+		function SaveValue(){
+			
+			<!--var fs = new ActiveXObject("Scripting.FileSystemObject");//创建ActiveXObject对象得到文件对象-->
+			<!--var file = fs.CreateTextFile("E://sub.txt",true); //ActiveXObject对象得到文件对象-->
+			<!---->
+			<!--var date_ = document.getElementById("logOutTime").value;-->
+			<!--var status_ = document.getElementById("Apply_State").value;-->
+			<!--var empname_ = document.getElementById("Applicant").value;-->
+			<!--var empdep_ = document.getElementById("Apply_Department").value;-->
+			<!--var reason_ = document.getElementById("Apply_Reason").value;-->
+			<!---->
+			<!--file.WriteLine("单据日期\r\n"+date_+"单据状态\r\n"+status_-->
+			<!--+"申请人\r\n"+empname_+"申请人岗位\r\n"+empdep_-->
+			<!--+"申请原因\r\n"+reason_);-->
+			<!--file.close();-->
+			alert("you click 单据日期");
+		window.JSWebView.closeWebWindow();
+			}
+	</script>
+
+<script type="text/javascript">
+	function hitest(){
+		alert("you click 单据日期");
+		window.JSWebView.closeWebWindow();
+}
+</script>
+<!--解决大部分浏览器输入法遮挡住输入框问题,但少数浏览器还是存在问题
+		1.当textarea接收到focus事件时,自动将文本框滚动到屏幕顶端
+		2.设计的输入框不要超过半个屏幕,如果一定要超过,textarea有change事件,计算输入了多少个字,相应的再把输入框向上滚动-->	
+<script type='text/javascript'> 
+		function textfocus(o){ o.style.position = 'fixed'; o.style.top = '50px'; o.style.zIndex = '999'; } 
+		function textblur(o){ o.style.position = 'static'; o.style.top = 'auto'; } 
+</script>
+
+<!--html5中新标签placeholder(显示提示字符)的浏览器兼容性问题-->
+<script type="text/javascript">
+	function placeholder(nodes,pcolor) {
+      if(nodes.length && !("placeholder" in document_createElement_x("input"))){
+          for(i=0;i
+              var self = nodes[i],
+                  placeholder = self.getAttribute('placeholder') || '';     
+              self.onfocus = function(){
+                  if(self.value == placeholder){
+                     self.value = '';
+                     self.style.color = "";
+                  }               
+              }
+              self.onblur = function(){
+                  if(self.value == ''){
+                      self.value = placeholder;
+                      self.style.color = pcolor;
+                  }              
+              }                                       
+              self.value = placeholder;  
+              self.style.color = pcolor;              
+          }
+      }
+    }    
+</script>
+</html>

+ 7 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/CaptureResultActivity.java

@@ -13,6 +13,7 @@ import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
 import com.alibaba.fastjson.JSON;
+import com.common.LogUtil;
 import com.common.data.JSONUtil;
 import com.common.data.StringUtil;
 import com.common.file.DownloadUtil;
@@ -160,12 +161,15 @@ public class CaptureResultActivity extends Activity {
         }));*/
         String url = null;
         url = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl")+"common/checkQrcodeScan.action";
-//        url = "http://192.168.253.63:8080/ERP/"+"common/checkQrcodeScan.action";
+//        url = "http://192.168.253.6/ERP/"+"common/checkQrcodeScan.action";
         String em_code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
         String sob = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master");
+        String password = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "user_password");
         Intent intent_web = new Intent("com.modular.main.WebViewCommActivity");
-        intent_web.putExtra("url",url + "?em_code=" + em_code + "&sob=" + sob + "&clientId=" + clientId);
-        intent_web.putExtra("title", "UAS网页登录");
+        url = url + "?em_code=" + em_code + "&sob=" + sob + "&clientId=" + clientId + "&password=" + password;
+        intent_web.putExtra("url",url);
+        LogUtil.i("flh",url);
+        intent_web.putExtra("title", "扫码登录");
         intent_web.putExtra("cookie", true);
         startActivity(intent_web);
         finish();

+ 21 - 8
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java

@@ -18,6 +18,7 @@ import android.view.MenuItem;
 import android.view.View;
 import android.webkit.CookieManager;
 import android.webkit.CookieSyncManager;
+import android.webkit.JavascriptInterface;
 import android.webkit.SslErrorHandler;
 import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
@@ -31,18 +32,18 @@ import com.alibaba.fastjson.JSON;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
 import com.common.system.SystemUtil;
+import com.core.app.MyApplication;
+import com.core.base.BaseActivity;
+import com.core.net.http.ViewUtil;
 import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshWebView;
+import com.modular.appmessages.model.SubMessage;
+import com.modular.login.LoginActivity;
 import com.umeng.socialize.ShareAction;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.umeng.socialize.media.UMImage;
-import com.core.app.MyApplication;
 import com.xzjmyk.pm.activity.R;
-import com.modular.appmessages.model.SubMessage;
 import com.xzjmyk.pm.activity.ui.MainActivity;
-import com.modular.login.LoginActivity;
-import com.core.base.BaseActivity;
-import com.core.net.http.ViewUtil;
 import com.xzjmyk.pm.activity.util.oa.CommonUtil;
 
 import org.apache.http.cookie.Cookie;
@@ -197,6 +198,8 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         webView.getRefreshableView().getSettings().setAppCacheEnabled(true);
         // 修改ua使得web端正确判断
 
+        webView.getRefreshableView().addJavascriptInterface(new JSWebView(), "JSWebView"); //在JSWebView类里实现javascript想调用的方法,并将其实例化传入webview, "JSWebView"这个字串告诉javascript调用哪个实例的方法
+
         String ua = webView.getRefreshableView().getSettings().getUserAgentString();
         webView.getRefreshableView().getSettings().setUserAgentString(ua + " uasClient");
 
@@ -207,8 +210,9 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         }
         Map<String, String> headers = new HashMap<>();
         headers.put("client-name", "uasClient");
-        //  url="http://192.168.253.132:9090/platform-b2c/?client=true";
+//          url="http://192.168.253.132:9090/platform-b2c/?client=true";
         webView.getRefreshableView().loadUrl(url, headers);
+//        webView.getRefreshableView().loadUrl("file:///android_asset/submit.html");
         webView.getRefreshableView().setWebChromeClient(new ChromeClient());
         webView.getRefreshableView().setWebViewClient(new WebViewClient() {
             @Override
@@ -255,10 +259,8 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                 handler.proceed();
             }
         });
-
     }
 
-
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
@@ -511,4 +513,15 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         }
         return true;
     }
+
+
+    public class JSWebView {
+
+        @JavascriptInterface
+        public void closeWebWindow(){
+//            Toast.makeText(MyApplication.getInstance(),"JSWebView",Toast.LENGTH_LONG).show();
+            finish();
+        }
+    }
+
 }

+ 46 - 6
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/DataInquiryActivity.java

@@ -18,6 +18,7 @@ import com.common.LogUtil;
 import com.core.app.Constants;
 import com.core.utils.CommonUtil;
 import com.core.widget.DrawableCenterTextView;
+import com.core.widget.EmptyLayout;
 import com.core.widget.view.MyGridView;
 import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshListView;
@@ -57,7 +58,11 @@ public class DataInquiryActivity extends BaseActivity {
     private DrawableCenterTextView mSearchTextView;
     private String mCurrentMaster;
     private String mCurrentUser;
+    private EmptyLayout mEmptyLayout;
     boolean flag = false;
+    private int[] mColors = new int[]{R.color.data_inquiry_gird_menu_color1, R.color.data_inquiry_gird_menu_color2
+            , R.color.data_inquiry_gird_menu_color3, R.color.data_inquiry_gird_menu_color4, R.color.data_inquiry_gird_menu_color5,
+            R.color.data_inquiry_gird_menu_color6};
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -81,17 +86,31 @@ public class DataInquiryActivity extends BaseActivity {
     private void initDatas() {
         String dataInquiryMenuCache = CommonUtil.getSharedPreferences(this,
                 mCurrentUser + mCurrentMaster + com.xzjmyk.pm.activity.ui.erp.activity.datainquiry.Constants.CONSTANT.DATA_INQUIRY_MENU_CACHE);
-        if (TextUtils.isEmpty(dataInquiryMenuCache)) {
+        if (dataInquiryMenuCache != null) {
+            try {
+                JSONObject resultObject = new JSONObject(dataInquiryMenuCache);
+                JSONArray dataArray = resultObject.optJSONArray("data");
+                if (dataArray == null || dataArray.length() == 0) {
+                    if (!CommonUtil.isNetWorkConnected(this)) {
+                        ToastMessage(getString(R.string.networks_out));
+                    } else {
+                        progressDialog.show();
+                        getMenuData();
+                    }
+                } else {
+                    analysisMenuData(dataInquiryMenuCache);
+                }
+            } catch (Exception e) {
+
+            }
+        } else {
             if (!CommonUtil.isNetWorkConnected(this)) {
                 ToastMessage(getString(R.string.networks_out));
             } else {
                 progressDialog.show();
                 getMenuData();
             }
-        } else {
-            analysisMenuData(dataInquiryMenuCache);
         }
-
     }
 
     private void initEvents() {
@@ -197,6 +216,12 @@ public class DataInquiryActivity extends BaseActivity {
         mDataInquiryModulView.setBackgroundColor(getResources().getColor(R.color.black));
         mDataInquiryModulTitleTv.setText("最近查询业务");
 
+        mEmptyLayout = new EmptyLayout(this, mMenuListView.getRefreshableView());
+        mEmptyLayout.setShowLoadingButton(false);
+        mEmptyLayout.setShowEmptyButton(false);
+        mEmptyLayout.setShowErrorButton(false);
+        mEmptyLayout.setEmptyMessage("数据为空");
+
         AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
         mRecentBrowseLl.setLayoutParams(layoutParams);
 
@@ -225,6 +250,7 @@ public class DataInquiryActivity extends BaseActivity {
                                 for (int k = 0; k < querySchemes.size(); k++) {
                                     if (inquiryGirdItemBean.getIconText().equals(querySchemes.get(k).getScheme())) {
                                         isExist = true;
+                                        inquiryGirdItemBean.setColor(mColors[(j) % mColors.length]);
                                         break loop;
                                     }
                                 }
@@ -266,7 +292,8 @@ public class DataInquiryActivity extends BaseActivity {
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case GET_MENU_DATA:
-                    progressDialog.dismiss();
+                    if (progressDialog.isShowing())
+                        progressDialog.dismiss();
                     if (mMenuListView.isRefreshing())
                         mMenuListView.onRefreshComplete();
                     String result = msg.getData().getString("result");
@@ -278,10 +305,13 @@ public class DataInquiryActivity extends BaseActivity {
                     analysisMenuData(result);
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
-                    progressDialog.dismiss();
+                    if (progressDialog.isShowing())
+                        progressDialog.dismiss();
                     if (mMenuListView.isRefreshing())
                         mMenuListView.onRefreshComplete();
                     ToastMessage(msg.getData().getString("result"));
+                    mEmptyLayout.setErrorMessage(msg.getData().getString("result"));
+                    mEmptyLayout.showError();
                     break;
             }
         }
@@ -335,8 +365,18 @@ public class DataInquiryActivity extends BaseActivity {
                     }
                     mDataInquiryMenuListAdapter.notifyDataSetChanged();
 
+                    if (mGridMenuDataInquiryBeans.size() == 0) {
+                        mSearchTextView.setVisibility(View.GONE);
+                        mEmptyLayout.showEmpty();
+                    } else {
+                        mSearchTextView.setVisibility(View.VISIBLE);
+                    }
+
                     if (flag)
                         refreshRecentHeader();
+                } else {
+                    mEmptyLayout.showEmpty();
+                    mSearchTextView.setVisibility(View.GONE);
                 }
             } catch (JSONException e) {
                 e.printStackTrace();

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/DataInquiryListActivity.java

@@ -654,7 +654,8 @@ public class DataInquiryListActivity extends BaseActivity implements View.OnClic
                                         property.setValue(value);
                                         property.setState(false);
 
-                                        propertyList.add(property);
+                                        if (!"$ALL".equals(display) && !"$ALL".equals(value))
+                                            propertyList.add(property);
                                     }
                                     schemeConditionBean.setProperties(propertyList);
                                 }

+ 5 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/ReportQueryCriteriaActivity.java

@@ -95,7 +95,8 @@ public class ReportQueryCriteriaActivity extends BaseActivity implements View.On
                                                     property.setValue(value);
                                                     property.setState(false);
 
-                                                    propertyList.add(property);
+                                                    if (!"$ALL".equals(display) && !"$ALL".equals(value))
+                                                        propertyList.add(property);
                                                 }
                                                 reportConditionBean.setProperties(propertyList);
                                             }
@@ -348,8 +349,9 @@ public class ReportQueryCriteriaActivity extends BaseActivity implements View.On
         } else if (!TextUtils.isEmpty(mDefaultCondition)) {
             intent.putExtra("condition", mDefaultCondition);
         } else {
-            ToastMessage("请确定查询条件!");
-            return;
+//            ToastMessage("请确定查询条件!");
+//            return;
+            intent.putExtra("condition", "1 = 1");
         }
         if (mReportInfo != null) {
             intent.putExtra("reportName", mReportInfo.getReportName());

+ 48 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/datainquiry/activity/ReportStatisticsActivity.java

@@ -20,6 +20,7 @@ import com.common.LogUtil;
 import com.core.app.Constants;
 import com.core.utils.CommonUtil;
 import com.core.widget.DrawableCenterTextView;
+import com.core.widget.EmptyLayout;
 import com.core.widget.view.MyGridView;
 import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshListView;
@@ -59,7 +60,11 @@ public class ReportStatisticsActivity extends BaseActivity {
     private DrawableCenterTextView mSearchTextView;
     private String mCurrentMaster;
     private String mCurrentUser;
+    private EmptyLayout mEmptyLayout;
     boolean flag = false;
+    private int[] mColors = new int[]{R.color.data_inquiry_gird_menu_color1, R.color.data_inquiry_gird_menu_color2
+            , R.color.data_inquiry_gird_menu_color3, R.color.data_inquiry_gird_menu_color4, R.color.data_inquiry_gird_menu_color5,
+            R.color.data_inquiry_gird_menu_color6};
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -81,15 +86,30 @@ public class ReportStatisticsActivity extends BaseActivity {
     private void initDatas() {
         String reportQueryMenuCache = CommonUtil.getSharedPreferences(this,
                 mCurrentUser + mCurrentMaster + com.xzjmyk.pm.activity.ui.erp.activity.datainquiry.Constants.CONSTANT.REPORT_QUERY_MENU_CACHE);
-        if (TextUtils.isEmpty(reportQueryMenuCache)) {
+        if (reportQueryMenuCache != null) {
+            try {
+                JSONObject resultObject = new JSONObject(reportQueryMenuCache);
+                JSONArray dataArray = resultObject.optJSONArray("data");
+                if (dataArray == null || dataArray.length() == 0) {
+                    if (!CommonUtil.isNetWorkConnected(this)) {
+                        ToastMessage(getString(R.string.networks_out));
+                    } else {
+                        progressDialog.show();
+                        getMenuData();
+                    }
+                } else {
+                    analysisMenuData(reportQueryMenuCache);
+                }
+            } catch (Exception e) {
+
+            }
+        } else {
             if (!CommonUtil.isNetWorkConnected(this)) {
                 ToastMessage(getString(R.string.networks_out));
             } else {
                 progressDialog.show();
                 getMenuData();
             }
-        } else {
-            analysisMenuData(reportQueryMenuCache);
         }
     }
 
@@ -196,6 +216,12 @@ public class ReportStatisticsActivity extends BaseActivity {
         mReportStatisticsModulView.setBackgroundColor(getResources().getColor(R.color.black));
         mReportStatisticsModulTitleTv.setText("最近查询业务");
 
+        mEmptyLayout = new EmptyLayout(this, mMenuListView.getRefreshableView());
+        mEmptyLayout.setShowLoadingButton(false);
+        mEmptyLayout.setShowEmptyButton(false);
+        mEmptyLayout.setShowErrorButton(false);
+        mEmptyLayout.setEmptyMessage("数据为空");
+
         AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
         mRecentBrowseLl.setLayoutParams(layoutParams);
 
@@ -239,6 +265,7 @@ public class ReportStatisticsActivity extends BaseActivity {
                                 for (int k = 0; k < reportList.size(); k++) {
                                     if (inquiryGirdItemBean.getIconText().equals(reportList.get(k).getTitle())) {
                                         isExist = true;
+                                        inquiryGirdItemBean.setColor(mColors[(j) % mColors.length]);
                                         break loop;
                                     }
                                 }
@@ -252,7 +279,7 @@ public class ReportStatisticsActivity extends BaseActivity {
 
                 }
 
-                String recentJson = JSON.toJSON(recentBrowse).toString();
+                String recentJson = JSON.toJSON(resultBrowse).toString();
                 CommonUtil.setSharedPreferences(ReportStatisticsActivity.this
                         , mCurrentUser + mCurrentMaster + com.xzjmyk.pm.activity.ui.erp.activity.datainquiry.Constants.CONSTANT.REPORT_QUERY_MENU_RECENT_CACHE
                         , recentJson);
@@ -280,7 +307,8 @@ public class ReportStatisticsActivity extends BaseActivity {
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case GET_MENU_DATA:
-                    progressDialog.dismiss();
+                    if (progressDialog.isShowing())
+                        progressDialog.dismiss();
                     if (mMenuListView.isRefreshing())
                         mMenuListView.onRefreshComplete();
                     String result = msg.getData().getString("result");
@@ -292,10 +320,13 @@ public class ReportStatisticsActivity extends BaseActivity {
                     analysisMenuData(result);
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
-                    progressDialog.dismiss();
+                    if (progressDialog.isShowing())
+                        progressDialog.dismiss();
                     if (mMenuListView.isRefreshing())
                         mMenuListView.onRefreshComplete();
                     ToastMessage(msg.getData().getString("result"));
+                    mEmptyLayout.setErrorMessage(msg.getData().getString("result"));
+                    mEmptyLayout.showError();
                     break;
             }
         }
@@ -339,9 +370,19 @@ public class ReportStatisticsActivity extends BaseActivity {
                         }
                     }
                     mReportStatisticsMenuListAdapter.notifyDataSetChanged();
-                    //setListViewHeightBasedOnChildren(mMenuListView);
+
+                    if (mGridMenuReportStatisticsBeans.size() == 0) {
+                        mSearchTextView.setVisibility(View.GONE);
+                        mEmptyLayout.showEmpty();
+                    } else {
+                        mSearchTextView.setVisibility(View.VISIBLE);
+                    }
+
                     if (flag)
                         refreshRecentHeader();
+                } else {
+                    mEmptyLayout.showEmpty();
+                    mSearchTextView.setVisibility(View.GONE);
                 }
             } catch (JSONException e) {
                 e.printStackTrace();

+ 14 - 20
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/net/ViewUtil.java

@@ -48,7 +48,6 @@ import java.util.List;
 import java.util.Map;
 
 
-
 /**
  * @author :LiuJie 时间: 2015年4月27日 上午11:30:17
  * @注释:UI公共方法类 全局登录
@@ -69,16 +68,12 @@ public class ViewUtil {
     private static List<LoginEntity> erpEntities;
     private static boolean hasErp = true;//是否有erp
 
- 
-
-
     private static String oldMsg;
     private static long time;
     private static String oldMsg2;
     private static long time2;
 
 
-
     public static Crouton crouton;
 
     /**
@@ -307,17 +302,17 @@ public class ViewUtil {
 //                showDialogCompany(CommonUtil.getSharedPreferences(ct, "loginJson"), user_phone, user_password);
 //            }
 //        } else {
-            //登录界面过来,不走缓存
-            String url = Constants.BASE_URL_LOGIN;
-            Map<String, String> params = new HashMap<String, String>();
-            params.put("user", user_phone);
-            params.put("password", user_password);
-            Message message = new Message();
-            Bundle bundle = new Bundle();
-            bundle.putString("phone", user_phone);
-            bundle.putString("password", user_password);
-            startNetThread(url, params, handler, Constants.SUCCESS_LOGIN, message,
-                    bundle, "get");
+        //登录界面过来,不走缓存
+        String url = Constants.BASE_URL_LOGIN;
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("user", user_phone);
+        params.put("password", user_password);
+        Message message = new Message();
+        Bundle bundle = new Bundle();
+        bundle.putString("phone", user_phone);
+        bundle.putString("password", user_password);
+        startNetThread(url, params, handler, Constants.SUCCESS_LOGIN, message,
+                bundle, "get");
 //        }
 
     }
@@ -474,7 +469,7 @@ public class ViewUtil {
         if (ct instanceof Activity) {
 //            if (!StringUtil.isEmpty(CommonUtil.getSharedPreferences(MyApplication.getInstance(),"erp_baseurl"))){
 //            }else{
-                ct.startActivity(new Intent("com.modular.main.DataDownloadActivity"));
+            ct.startActivity(new Intent("com.modular.main.DataDownloadActivity"));
 //            }
         }
         if (isBrodcast)
@@ -512,8 +507,8 @@ public class ViewUtil {
         }, 1500);
         if (!hasErp) {
             if (ct instanceof Activity) {
-                if (!StringUtil.isEmpty(CommonUtil.getSharedPreferences(MyApplication.getInstance(),"erp_baseurl"))){
-                }else{
+                if (!StringUtil.isEmpty(CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl"))) {
+                } else {
                     ct.startActivity(new Intent("com.modular.main.DataDownloadActivity"));
                 }
             }
@@ -955,7 +950,6 @@ public class ViewUtil {
     }
 
 
-    
     public static void clearAccount(Context ct) {
         CommonUtil.clearSharedPreferences(ct, "erp_baseurl");
         CommonUtil.clearSharedPreferences(ct, "erp_master");

+ 0 - 67
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/NestingScrollview.java

@@ -1,67 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.view;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.ViewConfiguration;
-import android.widget.ScrollView;
-
-public class NestingScrollview  extends ScrollView {
-    private int downX;
-    private int downY;
-    private int mTouchSlop;
-    private boolean autoScroll = true;
-
-    /**
-     * 多层嵌套时的自动滚动
-     * @param autoScroll
-     */
-    public void setAutoScroll(boolean autoScroll) {
-        this.autoScroll = autoScroll;
-    }
-
-    /**
-     * 防止多层嵌套时候的自动滚动
-     * @param rect
-     * @return
-     */
-    @Override
-    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
-            return autoScroll?super.computeScrollDeltaToGetChildRectOnScreen(rect):0;
-    }
-
-
-    public NestingScrollview(Context context) {
-        super(context);
-        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
-    }
-
-    public NestingScrollview(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
-    }
-
-    public NestingScrollview(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent e) {
-        int action = e.getAction();
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                downX = (int) e.getRawX();
-                downY = (int) e.getRawY();
-                break;
-            case MotionEvent.ACTION_MOVE:
-                int moveY = (int) e.getRawY();
-                if (Math.abs(moveY - downY) > mTouchSlop) {
-                    return true;
-                }
-        }
-        return super.onInterceptTouchEvent(e);
-    }
-
-}

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/oa/OAHttpUtil.java

@@ -70,7 +70,7 @@ public class OAHttpUtil {
             //录入时间作为选择时间,如果没有录入,使用实际到达时间或是预计到达时间或开始时间
             model.setRecorddate(getTimeMillis(o, "recorddate", "vr_recorddate", "vr_date", "mpd_arrivedate", "startdate", "mpd_actdate"));
             model.setTitle(JSONUtil.getText(o, "mpd_company", "name", "vr_cuname", "taskname", "custname"));
-            model.setRemark(JSONUtil.getText(o, "mpd_remark", "vr_detail", "detail", "description"));
+            model.setRemark(JSONUtil.getText(o, "mpd_remark", "vr_nichestep","vr_detail", "detail", "description"));
             model.setAddress(JSONUtil.getText(o, "vr_cuaddress", "mpd_address", "address"));
             model.setRecorder(JSONUtil.getText(o, "vr_emname", "recorder", "mp_recorder"));
             //外勤计划的实行人就是录入人

+ 1 - 0
WeiChat/src/main/res/layout/activity_data_inquiry.xml

@@ -16,6 +16,7 @@
         android:drawablePadding="6dp"
         android:gravity="center_vertical"
         android:padding="6dp"
+        android:visibility="gone"
         android:text="@string/search"/>
 
     <com.handmark.pulltorefresh.library.PullToRefreshListView

+ 5 - 9
WeiChat/src/main/res/layout/activity_expense_reimbursement.xml

@@ -33,18 +33,10 @@
                     android:textColor="@color/text_main"
                     android:textSize="15sp" />
 
-                <ImageView
-                    style="@style/IMTbleLine_ArrowImg"
-                    android:layout_alignParentRight="true"
-                    android:contentDescription="@string/app_name" />
                 <com.andreabaccega.widget.FormEditText
                     android:id="@+id/reimbursement_title_fet"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_alignParentBottom="true"
-                    android:layout_alignParentEnd="true"
-                    android:layout_alignParentRight="true"
-                    android:layout_marginBottom="13dp"
                     android:background="@null"
                     android:gravity="center_vertical|right"
                     android:hint="@string/common_input"
@@ -54,7 +46,11 @@
                     android:textSize="15sp"
                     whatever:customRegexp="^[A-Za-z\u4e00-\u9fa5]{1,30}+$"
                     whatever:testErrorString="限制30个之内有效中英文字符"
-                    whatever:testType="regexp" />
+                    whatever:testType="regexp"
+                    android:layout_alignBaseline="@+id/name_tv"
+                    android:layout_alignBottom="@+id/name_tv"
+                    android:layout_alignParentRight="true"
+                    android:layout_alignParentEnd="true" />
             </RelativeLayout>
 
             <View

+ 0 - 4
WeiChat/src/main/res/layout/expense_details_table_item.xml

@@ -38,11 +38,7 @@
             android:layout_gravity="center_vertical"
             android:textColor="@color/text_main"
             android:textSize="14sp"
-            android:maxLength="7"
             android:paddingLeft="10dp"
-            whatever:customRegexp="^[0-9]+(.[0-9]{2})?$"
-            whatever:testType="regexp"
-            whatever:testErrorString="限制输入7位有效正实数(保留两位小数)"
         />
 
         <View

+ 1 - 0
WeiChat/src/main/res/layout/simple_calculator_ppview.xml

@@ -41,6 +41,7 @@
             android:gravity="center_vertical|right"
             android:layout_marginRight="5dp"
             android:textSize="17sp"
+            android:maxLength="8"
             />
     </LinearLayout>
     <LinearLayout

+ 12 - 0
WeiChat/src/main/res/menu/menu_uusport_list.xml

@@ -0,0 +1,12 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context="com.xzjmyk.pm.activity.MainActivity">
+
+    <item
+        android:id="@+id/more"
+        android:title="@string/sports_recode"
+        android:icon="@drawable/xlist"
+        app:showAsAction="ifRoom" />
+
+</menu>

+ 1 - 0
app_core/common/build.gradle

@@ -48,5 +48,6 @@ dependencies {
     compile project(':library-viewpager-indicator')
     compile project(':lib-zxing')
     compile project(':library-refreshlayout')
+    compile project(':recyclerlibrary')
 
 }

+ 0 - 1
app_core/common/src/main/java/com/core/utils/CommonInterface.java

@@ -283,7 +283,6 @@ public class CommonInterface implements OnHttpResultListener {
         param.put("ct_cucode", cucode);//客户编号
         param.put("ct_address", address);//客户地址
         param.put("ct_job", job);      //岗位
-
         return param;
     }
 

+ 2 - 0
app_core/common/src/main/java/com/core/xmpp/XChatManager.java

@@ -5,6 +5,7 @@ import android.util.Log;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
 import com.common.config.VersionUtil;
 import com.common.data.CalendarUtil;
 import com.common.data.JSONUtil;
@@ -284,6 +285,7 @@ public class XChatManager {
     /*UU 助手的数据源*/
     private void saveUUHelperMessage(String messageBody) {
         if (!VersionUtil.showUUHelper()) return;
+        LogUtil.i("messageBody="+messageBody);
         JSONObject object = JSON.parseObject(messageBody);
         long timeSend = JSONUtil.getLong(object, "timeSend");
         String content = JSONUtil.getText(object, "content", "title");

+ 2 - 1
app_core/common/src/main/res/layout/act_taskerp_add.xml

@@ -37,6 +37,7 @@
             android:background="@color/white"
             android:layout_height="30dp">
             <TextView
+                android:id="@+id/detailsTV"
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
                 android:gravity="bottom"
@@ -92,7 +93,7 @@
                     android:id="@+id/et_task_people"
                     style="@style/TagGroup"
                     android:layout_width="wrap_content"
-                    android:layout_height="fill_parent"
+                    android:layout_height="match_parent"
                     android:background="@null" />
             </ScrollView>
 

+ 0 - 4
app_core/common/src/main/res/layout/activity_expense_reimbursement.xml

@@ -33,10 +33,6 @@
                     android:textColor="@color/text_main"
                     android:textSize="15sp" />
 
-                <ImageView
-                    style="@style/IMTbleLine_ArrowImg"
-                    android:layout_alignParentRight="true"
-                    android:contentDescription="@string/app_name" />
                 <com.andreabaccega.widget.FormEditText
                     android:id="@+id/reimbursement_title_fet"
                     android:layout_width="wrap_content"

+ 1 - 4
app_core/common/src/main/res/layout/expense_details_table_item.xml

@@ -38,11 +38,8 @@
             android:layout_gravity="center_vertical"
             android:textColor="@color/text_main"
             android:textSize="14sp"
-            android:maxLength="7"
             android:paddingLeft="10dp"
-            whatever:customRegexp="^[0-9]+(.[0-9]{2})?$"
-            whatever:testType="regexp"
-            whatever:testErrorString="限制输入7位有效正实数(保留两位小数)"
+
         />
 
         <View

+ 1 - 0
app_core/common/src/main/res/layout/simple_calculator_ppview.xml

@@ -41,6 +41,7 @@
             android:gravity="center_vertical|right"
             android:layout_marginRight="5dp"
             android:textSize="17sp"
+            android:maxLength="8"
             />
     </LinearLayout>
     <LinearLayout

+ 12 - 0
app_core/common/src/main/res/menu/menu_uusport_list.xml

@@ -0,0 +1,12 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context="com.xzjmyk.pm.activity.MainActivity">
+
+    <item
+        android:id="@+id/more"
+        android:title="@string/sports_recode"
+        android:icon="@drawable/xlist"
+        app:showAsAction="ifRoom" />
+
+</menu>

+ 1 - 1
app_core/common/src/main/res/values/styles.xml

@@ -1198,7 +1198,7 @@
         <item name="android:lines">1</item>
         <item name="android:gravity">center</item>
         <item name="android:textColor">@color/titleBlue</item>
-        <item name="android:textSize">@dimen/BigTextSize</item>
+        <item name="android:textSize">@dimen/text_main</item>
     </style>
 
     <style name="approvalStyle">

+ 2 - 0
app_modular/appme/src/main/AndroidManifest.xml

@@ -35,5 +35,7 @@
         <activity
             android:name="com.uas.appme.other.activity.SelectAreaActivity"
             android:screenOrientation="portrait" />
+        <activity android:name=".pedometer.view.UURanking"
+            android:label="排行榜"></activity>
     </application>
 </manifest>

+ 76 - 0
app_modular/appme/src/main/java/com/uas/appme/pedometer/adapter/UUAttentionAdapter.java

@@ -0,0 +1,76 @@
+package com.uas.appme.pedometer.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.common.data.ListUtils;
+import com.uas.appme.R;
+import com.uas.appme.pedometer.bean.StepEntity;
+
+import java.util.List;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+/**
+ * Created by FANGlh on 2017/9/19.
+ * function:
+ */
+
+public class UUAttentionAdapter extends BaseAdapter{
+    private List<StepEntity> mList;
+    private Context mContext;
+
+    public List<StepEntity> getmList() {return mList;}
+    public void setmList(List<StepEntity> mList) {this.mList = mList;}
+    public UUAttentionAdapter(Context mContext){this.mContext = mContext;}
+    @Override
+    public int getCount() {
+        return ListUtils.isEmpty(mList) ? 0 : mList.size();
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return mList.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder viewHolder = null;
+        if (convertView == null){
+            viewHolder = new ViewHolder();
+            convertView =  View.inflate(mContext, R.layout.item_uuattention,null);
+            viewHolder.ranking_tv = (TextView) convertView.findViewById(R.id.ranking_tv);
+            viewHolder.name_tv = (TextView) convertView.findViewById(R.id.name_tv);
+            viewHolder.steps_tv = (TextView) convertView.findViewById(R.id.steps_tv);
+            viewHolder.prise_tv = (TextView) convertView.findViewById(R.id.prise_tv);
+            viewHolder.photo_img = (CircleImageView) convertView.findViewById(R.id.photo_img);
+            viewHolder.prise_im = (ImageView) convertView.findViewById(R.id.prise_im);
+            convertView.setTag(viewHolder);
+        }else {
+            viewHolder = (ViewHolder) convertView.getTag();
+        }
+        viewHolder.ranking_tv.setText(position+"");
+        viewHolder.name_tv.setText("方龙海");
+        viewHolder.steps_tv.setText(mList.get(position).getSteps());
+        viewHolder.prise_tv.setText("0");
+        return convertView;
+    }
+
+    class ViewHolder{
+        TextView ranking_tv;
+        CircleImageView photo_img;
+        TextView name_tv;
+        TextView steps_tv;
+        TextView prise_tv;
+        ImageView prise_im;
+    }
+}

+ 77 - 0
app_modular/appme/src/main/java/com/uas/appme/pedometer/adapter/UURankingAdapter.java

@@ -0,0 +1,77 @@
+package com.uas.appme.pedometer.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.common.data.ListUtils;
+import com.uas.appme.R;
+import com.uas.appme.pedometer.bean.StepEntity;
+
+import java.util.List;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+/**
+ * Created by FANGlh on 2017/9/19.
+ * function:
+ */
+
+public class UURankingAdapter extends BaseAdapter{
+    private List<StepEntity> mList;
+    private Context mContext;
+
+    public List<StepEntity> getmList() {return mList;}
+    public void setmList(List<StepEntity> mList) {this.mList = mList;}
+    public UURankingAdapter(Context mContext){this.mContext = mContext;}
+    @Override
+    public int getCount() {
+        return ListUtils.isEmpty(mList) ? 0 : mList.size();
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return mList.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder viewHolder = null;
+        if (convertView == null){
+            viewHolder = new ViewHolder();
+            convertView =  View.inflate(mContext, R.layout.item_uuranking,null);
+            viewHolder.ranking_tv = (TextView) convertView.findViewById(R.id.ranking_tv);
+            viewHolder.name_tv = (TextView) convertView.findViewById(R.id.name_tv);
+            viewHolder.steps_tv = (TextView) convertView.findViewById(R.id.steps_tv);
+            viewHolder.prise_tv = (TextView) convertView.findViewById(R.id.prise_tv);
+            viewHolder.photo_img = (CircleImageView) convertView.findViewById(R.id.photo_img);
+            viewHolder.prise_im = (ImageView) convertView.findViewById(R.id.prise_im);
+            convertView.setTag(viewHolder);
+        }else {
+            viewHolder = (ViewHolder) convertView.getTag();
+        }
+        viewHolder.ranking_tv.setText(position+"");
+        viewHolder.name_tv.setText("hihi");
+        viewHolder.steps_tv.setText(mList.get(position).getSteps());
+        viewHolder.prise_tv.setText("0");
+        return convertView;
+    }
+
+    class ViewHolder{
+        TextView ranking_tv;
+        CircleImageView photo_img;
+        TextView name_tv;
+        TextView steps_tv;
+        TextView prise_tv;
+        ImageView prise_im;
+    }
+}

+ 12 - 0
app_modular/appme/src/main/java/com/uas/appme/pedometer/view/NewStepActivity.java

@@ -218,7 +218,14 @@ public class NewStepActivity extends BaseActivity implements Handler.Callback {
      */
     private void setDatas() {
         StepEntity stepEntity = stepDataDao.getCurDataByDate(curSelDate);
+        //制作一些假数据
 
+//        for(int k=1;k<20;k++){
+//            StepEntity entity = new StepEntity();
+//            entity.setCurDate("2017-09-"+k);
+//            entity.setSteps(123*k+"");
+//            stepDataDao.addNewData(entity);
+//        }
         if (stepEntity != null) {
             int steps = Integer.parseInt(stepEntity.getSteps());
 
@@ -299,6 +306,8 @@ public class NewStepActivity extends BaseActivity implements Handler.Callback {
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
+//        if (!CommonUtil.isReleaseVersion())
+            getMenuInflater().inflate(R.menu.menu_uusport_list, menu);
         return super.onCreateOptionsMenu(menu);
     }
 
@@ -306,6 +315,8 @@ public class NewStepActivity extends BaseActivity implements Handler.Callback {
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home){
             startActivity(new Intent(getApplicationContext(), SettingActivity.class));
+        } else if (item.getItemId() == R.id.more){
+            startActivity(new Intent(this,UURanking.class));
         }
         return super.onOptionsItemSelected(item);
     }
@@ -315,4 +326,5 @@ public class NewStepActivity extends BaseActivity implements Handler.Callback {
         startActivity(new Intent(getApplicationContext(), SettingActivity.class));
         super.onBackPressed();
     }
+
 }

+ 106 - 0
app_modular/appme/src/main/java/com/uas/appme/pedometer/view/UURanking.java

@@ -0,0 +1,106 @@
+package com.uas.appme.pedometer.view;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.core.app.MyApplication;
+import com.core.base.BaseActivity;
+import com.core.utils.CommonUtil;
+import com.core.utils.helper.AvatarHelper;
+import com.core.widget.MyListView;
+import com.handmark.pulltorefresh.library.PullToRefreshListView;
+import com.uas.appme.R;
+import com.uas.appme.pedometer.adapter.UURankingAdapter;
+import com.uas.appme.pedometer.bean.StepEntity;
+import com.uas.appme.pedometer.db.StepDataDao;
+import com.uas.appme.pedometer.utils.TimeUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+/**
+ * Created by FANGlh on 2017/9/19.
+ * function:
+ */
+
+public class UURanking extends BaseActivity {
+    private CircleImageView mPhotoImg;
+    private TextView mNameTv;
+    private TextView mRankingTv;
+    private TextView mStepsTv;
+    private TextView mPriseTv;
+    private ImageView mPriseIm;
+    private View mHideAboveAf;
+    private LinearLayout mAttentionLl;
+    private PullToRefreshListView mAttentionPtlv;
+    private MyListView mAllPtlv;
+    private TextView mInviteFriendsTv;
+    private StepDataDao stepDataDao;
+    private String curSelDate;
+    private String myem_name;
+    private List<StepEntity> stepEntityList;
+    private UURankingAdapter mRankAdapter;
+    private ImageView mHeaderImg;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.uu_ranking_activity);
+        initView();
+        initData();
+    }
+
+    private void initView() {
+
+        mHeaderImg = (ImageView) findViewById(R.id.header_background_im);
+        mPhotoImg = (CircleImageView) findViewById(R.id.photo_img);
+        mNameTv = (TextView) findViewById(R.id.name_tv);
+        mRankingTv = (TextView) findViewById(R.id.ranking_tv);
+        mStepsTv = (TextView) findViewById(R.id.steps_tv);
+        mPriseTv = (TextView) findViewById(R.id.prise_tv);
+        mPriseIm = (ImageView) findViewById(R.id.prise_im);
+        mHideAboveAf = (View) findViewById(R.id.hide_above_af);
+        mAttentionLl = (LinearLayout) findViewById(R.id.attention_ll);
+        mAttentionPtlv = (PullToRefreshListView) findViewById(R.id.attention_ptlv);
+        mAllPtlv = (MyListView) findViewById(R.id.all_ptlv);
+        mInviteFriendsTv = (TextView) findViewById(R.id.invite_friends_tv);
+        stepDataDao = new StepDataDao(this);
+        curSelDate = TimeUtil.getCurrentDate();
+        stepEntityList = new ArrayList<>();
+        mRankAdapter = new UURankingAdapter(this);
+        mAllPtlv.setAdapter(mRankAdapter);
+
+        mHeaderImg.requestFocus();
+        mAttentionLl.setVisibility(View.GONE);
+
+        myem_name = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_emname");
+        mNameTv.setText(myem_name+"");
+        String loginUserId = MyApplication.getInstance().mLoginUser.getUserId();
+        AvatarHelper.getInstance().display(loginUserId, mPhotoImg, true, false);
+        StepEntity stepEntity = stepDataDao.getCurDataByDate(curSelDate);
+        if (stepEntity != null) {
+            int steps = Integer.parseInt(stepEntity.getSteps());
+            //获取全局的步数
+            mStepsTv.setText(String.valueOf(steps));
+        } else {
+            //获取全局的步数
+            mStepsTv.setText("0");
+        }
+
+        stepEntityList.clear();
+        stepEntityList.addAll(stepDataDao.getAllDatas());
+        mRankAdapter.setmList(stepEntityList);
+        mRankAdapter.notifyDataSetChanged();
+    }
+
+    private void initData() {
+
+    }
+
+
+}

+ 80 - 0
app_modular/appme/src/main/res/layout/item_uuattention.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="5dp"
+        android:layout_marginLeft="20dp"
+        android:layout_marginRight="10dp"
+        android:background="@color/bg_main"
+        >
+
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:id="@+id/photo_img"
+            android:layout_width="45dp"
+            android:layout_height="45dp"
+            android:contentDescription="@string/app_name"
+            android:layout_marginTop="5dp"
+            android:layout_marginBottom="5dp"
+            android:src="@drawable/common_header_boy"/>
+
+        <TextView
+            android:id="@+id/name_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="8dp"
+            android:layout_toRightOf="@+id/photo_img"
+            android:textColor="@color/black"
+            android:textSize="@dimen/text_hine"
+            android:layout_marginTop="10dp"
+            android:text="张三"
+
+            />
+        <TextView
+            android:id="@+id/ranking_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="8dp"
+            android:layout_toRightOf="@+id/photo_img"
+            android:layout_below="@id/name_tv"
+            android:textColor="@color/gray"
+            android:textSize="@dimen/text_hine"
+            android:layout_marginTop="4dp"
+            android:text="第一名"/>
+
+        <TextView
+            android:id="@+id/steps_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="20dp"
+            android:layout_marginBottom="0dp"
+            android:textSize="@dimen/BigTextSize"
+            android:text="9999"
+            android:textColor="@color/green"
+            android:layout_toLeftOf="@+id/prise_tv"
+            android:layout_marginRight="20dp"
+            />
+
+        <TextView
+            android:id="@+id/prise_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_marginTop="5dp"
+            android:layout_marginBottom="0dp"
+            android:textSize="@dimen/text_hine"
+            android:text="1"
+            android:textColor="@color/text_hine"
+            android:layout_marginRight="5dp"/>
+        <ImageView
+            android:id="@+id/prise_im"
+            android:layout_width="25dp"
+            android:layout_height="25dp"
+            android:src="@drawable/uuu"
+            android:layout_alignParentRight="true"
+            android:layout_below="@+id/prise_tv"
+            android:layout_marginTop="5dp"/>
+    </RelativeLayout>
+</LinearLayout>

+ 82 - 0
app_modular/appme/src/main/res/layout/item_uuranking.xml

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:background="@color/bg_main">
+
+    <TextView
+        android:id="@+id/ranking_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@+id/photo_img"
+        android:textColor="@color/black"
+        android:textSize="@dimen/text_main"
+        android:text="1"
+        android:layout_marginTop="20dp"
+        android:layout_alignParentLeft="true"
+        android:layout_marginLeft="10dp"
+        />
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="5dp"
+        android:layout_marginRight="10dp"
+        >
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:id="@+id/photo_img"
+            android:layout_width="45dp"
+            android:layout_height="45dp"
+            android:contentDescription="@string/app_name"
+            android:layout_marginTop="5dp"
+            android:layout_marginBottom="5dp"
+            android:src="@drawable/common_header_boy"/>
+
+        <TextView
+            android:id="@+id/name_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="8dp"
+            android:layout_toRightOf="@+id/photo_img"
+            android:textColor="@color/black"
+            android:textSize="@dimen/text_hine"
+            android:text="张三"
+            android:layout_marginTop="20dp"
+            />
+
+
+        <TextView
+            android:id="@+id/steps_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="@dimen/BigTextSize"
+            android:text="9999"
+            android:textColor="@color/green"
+            android:layout_marginRight="15dp"
+            android:layout_below="@+id/prise_tv"
+            android:layout_toLeftOf="@+id/prise_im"
+            android:layout_toStartOf="@+id/prise_im"
+            android:layout_marginEnd="15dp" />
+
+        <TextView
+            android:id="@+id/prise_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_marginTop="5dp"
+            android:layout_marginBottom="0dp"
+            android:textSize="@dimen/text_hine"
+            android:text="1"
+            android:textColor="@color/text_hine"
+            android:layout_marginRight="5dp"/>
+        <ImageView
+            android:id="@+id/prise_im"
+            android:layout_width="25dp"
+            android:layout_height="25dp"
+            android:src="@drawable/uuu"
+            android:layout_alignParentRight="true"
+            android:layout_below="@+id/prise_tv"
+            android:layout_marginTop="5dp"/>
+    </RelativeLayout>
+</LinearLayout>

+ 151 - 0
app_modular/appme/src/main/res/layout/uu_ranking_activity.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+
+  <ScrollView
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:fillViewport="true"
+      android:scrollbars="none"
+      android:visibility="visible">
+      <LinearLayout
+          android:layout_width="match_parent"
+          android:layout_height="match_parent"
+          android:orientation="vertical">
+          <ImageView
+              android:id="@+id/header_background_im"
+              android:focusableInTouchMode="true"
+              android:layout_width="match_parent"
+              android:layout_height="200dp"
+              android:background="@drawable/uuu"/>
+
+
+          <RelativeLayout
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:padding="5dp"
+              android:background="@color/bg_main"
+              >
+
+              <de.hdodenhof.circleimageview.CircleImageView
+                  android:id="@+id/photo_img"
+                  android:layout_width="45dp"
+                  android:layout_height="45dp"
+                  android:contentDescription="@string/app_name"
+                  android:layout_marginTop="5dp"
+                  android:layout_marginBottom="5dp"
+                  android:src="@drawable/common_header_boy"
+                  android:layout_marginLeft="20dp"
+                  />
+
+              <TextView
+                  android:id="@+id/name_tv"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_marginLeft="8dp"
+                  android:layout_toRightOf="@+id/photo_img"
+                  android:textColor="@color/black"
+                  android:textSize="@dimen/text_hine"
+                  android:layout_marginTop="10dp"
+                  android:text="张三"
+
+                  />
+              <TextView
+                  android:id="@+id/ranking_tv"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_marginLeft="8dp"
+                  android:layout_toRightOf="@+id/photo_img"
+                  android:layout_below="@id/name_tv"
+                  android:textColor="@color/gray"
+                  android:textSize="@dimen/text_hine"
+                  android:layout_marginTop="4dp"
+                  android:text="第一名"/>
+
+              <TextView
+                  android:id="@+id/steps_tv"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_marginTop="20dp"
+                  android:layout_marginBottom="0dp"
+                  android:textSize="@dimen/BigTextSize"
+                  android:text="9999"
+                  android:textColor="@color/green"
+                  android:layout_toLeftOf="@+id/prise_tv"
+                  android:layout_marginRight="20dp"
+                  />
+
+              <TextView
+                  android:id="@+id/prise_tv"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_alignParentRight="true"
+                  android:layout_marginTop="5dp"
+                  android:layout_marginBottom="0dp"
+                  android:textSize="@dimen/text_hine"
+                  android:text="1"
+                  android:textColor="@color/text_hine"
+                  android:layout_marginRight="15dp"
+                  />
+              <ImageView
+                  android:id="@+id/prise_im"
+                  android:layout_width="20dp"
+                  android:layout_height="20dp"
+                  android:src="@drawable/uuu"
+                  android:layout_alignParentRight="true"
+                  android:layout_below="@+id/prise_tv"
+                  android:layout_marginTop="5dp"
+                  android:layout_marginRight="10dp"/>
+          </RelativeLayout>
+          <View
+              android:id="@+id/hide_above_af"
+              android:layout_width="match_parent"
+              android:layout_height="10dp"
+              android:background="@color/black_gray"
+              android:layout_marginTop="1dp"
+              android:visibility="visible"/>
+
+       <LinearLayout
+            android:id="@+id/attention_ll"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+            <com.handmark.pulltorefresh.library.PullToRefreshListView
+                android:id="@+id/attention_ptlv"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@color/item_line"
+                android:dividerHeight="2px"
+                android:scrollbars="none" />
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="10dp"
+                android:background="@color/black_gray"
+                android:layout_marginTop="1dp"
+                android:visibility="visible"/>
+        </LinearLayout>
+              <com.core.widget.MyListView
+                  android:id="@+id/all_ptlv"
+                  android:layout_width="match_parent"
+                  android:layout_height="wrap_content"
+                  android:background="@color/item_line"
+                  android:dividerHeight="2px"
+                  />
+          <View
+              android:layout_width="match_parent"
+              android:layout_height="@dimen/line"
+              android:background="@color/item_line"/>
+          <TextView
+              android:id="@+id/invite_friends_tv"
+              android:textColor="@color/green"
+              android:layout_width="match_parent"
+              android:layout_height="60dp"
+              android:text="邀请好友参加UU运行"
+              android:gravity="center"
+              />
+      </LinearLayout>
+  </ScrollView>
+</LinearLayout>

+ 21 - 24
app_modular/appmessages/src/main/java/com/modular/appmessages/activity/MessageWebActivity.java

@@ -18,8 +18,6 @@ import com.common.system.SystemUtil;
 import com.core.base.BaseActivity;
 import com.core.utils.CommonUtil;
 import com.core.utils.IntentUtils;
-import com.handmark.pulltorefresh.library.PullToRefreshBase;
-import com.handmark.pulltorefresh.library.PullToRefreshWebView;
 import com.modular.appmessages.R;
 import com.umeng.socialize.ShareAction;
 import com.umeng.socialize.bean.SHARE_MEDIA;
@@ -28,7 +26,7 @@ import com.umeng.socialize.media.UMImage;
 public class MessageWebActivity extends BaseActivity {
 
 
-    private PullToRefreshWebView webViewRefresh;
+    private WebView webViewRefresh;
     private ProgressBar progressBar;
     private String url;
 
@@ -36,7 +34,7 @@ public class MessageWebActivity extends BaseActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_message_web);
-        webViewRefresh = (PullToRefreshWebView) findViewById(R.id.webViewRefresh);
+        webViewRefresh = (WebView) findViewById(R.id.webView);
         progressBar = (ProgressBar) findViewById(R.id.progressBar);
         initView();
         initData();
@@ -85,17 +83,17 @@ public class MessageWebActivity extends BaseActivity {
     }
 
     private void initView() {
-        webViewRefresh.getRefreshableView().getSettings().setJavaScriptEnabled(true);
-        webViewRefresh.getRefreshableView().getSettings().setSupportZoom(true);
-        webViewRefresh.getRefreshableView().getSettings().setBuiltInZoomControls(true);
-        webViewRefresh.getRefreshableView().getSettings().setUseWideViewPort(true);
-        webViewRefresh.getRefreshableView().getSettings().setDomStorageEnabled(true);
-        webViewRefresh.getRefreshableView().getSettings().setLoadWithOverviewMode(true);
-        webViewRefresh.getRefreshableView().getSettings().setDefaultTextEncodingName("utf-8");
-        webViewRefresh.getRefreshableView().getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
-        webViewRefresh.getRefreshableView().clearCache(true);
-        webViewRefresh.getRefreshableView().clearHistory();
-        webViewRefresh.getRefreshableView().setWebViewClient(new WebViewClient() {
+        webViewRefresh.getSettings().setJavaScriptEnabled(true);
+        webViewRefresh.getSettings().setSupportZoom(true);
+        webViewRefresh.getSettings().setBuiltInZoomControls(true);
+        webViewRefresh.getSettings().setUseWideViewPort(true);
+        webViewRefresh.getSettings().setDomStorageEnabled(true);
+        webViewRefresh.getSettings().setLoadWithOverviewMode(true);
+        webViewRefresh.getSettings().setDefaultTextEncodingName("utf-8");
+        webViewRefresh.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
+        webViewRefresh.clearCache(true);
+        webViewRefresh.clearHistory();
+        webViewRefresh.setWebViewClient(new WebViewClient() {
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
                 view.loadUrl(url);
                 return true;
@@ -120,24 +118,23 @@ public class MessageWebActivity extends BaseActivity {
                 handler.proceed();
             }
         });
-        webViewRefresh.getRefreshableView().setWebChromeClient(new WebChromeClient() {
+        webViewRefresh.setWebChromeClient(new WebChromeClient() {
             @Override
             public void onProgressChanged(WebView view, int newProgress) {
                 progressBar.setProgress(newProgress);
                 if (newProgress == 100) {
                     progressBar.setProgress(newProgress);
                     progressBar.setVisibility(View.GONE);
-                    webViewRefresh.onRefreshComplete();
                 }
                 super.onProgressChanged(view, newProgress);
             }
         });
-        webViewRefresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<WebView>() {
-            @Override
-            public void onRefresh(PullToRefreshBase<WebView> refreshView) {
-                loadData();
-            }
-        });
+//        webViewRefresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<WebView>() {
+//            @Override
+//            public void onRefresh(PullToRefreshBase<WebView> refreshView) {
+//                loadData();
+//            }
+//        });
     }
 
     private void initData() {
@@ -154,7 +151,7 @@ public class MessageWebActivity extends BaseActivity {
 
     private void loadData() {
         if (url != null) {
-            webViewRefresh.getRefreshableView().loadUrl(url);
+            webViewRefresh.loadUrl(url);
         }
 
     }

+ 3 - 2
app_modular/appmessages/src/main/java/com/modular/appmessages/activity/UUHelperActivity.java

@@ -31,7 +31,6 @@ public class UUHelperActivity extends BaseActivity implements View.OnClickListen
 
     private RecyclerView contentRV;
     private UUHelperAdapter mAdapter;
-
     private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -107,7 +106,7 @@ public class UUHelperActivity extends BaseActivity implements View.OnClickListen
             IntentUtils.linkCommonWeb(ct, url, "关于优软", null, null);
         } else if (id == R.id.experienceTV) {
             url = "http://113.105.74.140:8080/new/";
-            IntentUtils.linkCommonWeb(ct, url, "功能介绍", null, null);
+            IntentUtils.linkCommonWeb(ct, url, "功能介绍", null, null);
         } else if (id == R.id.serviceTV) {
             CommonUtil.setSharedPreferences(this, Constants.SET_CALL, true);
             Intent intent = new Intent("com.modular.main.FeedbackActivity");
@@ -115,6 +114,8 @@ public class UUHelperActivity extends BaseActivity implements View.OnClickListen
             intent.putExtra(AppConstant.EXTRA_URL, mConfig.help_url);
             intent.putExtra(AppConstant.EXTRA_TITLE, "用户反馈");
             startActivity(intent);
+        } else if (R.id.inputImg == id) {
+
         }
     }
 

+ 1 - 1
app_modular/appmessages/src/main/java/com/modular/appmessages/adapter/UUHelperAdapter.java

@@ -94,7 +94,7 @@ public class UUHelperAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
         holder.timeTV.setText(model.getDate());
         holder.titleTV.setText(model.getTitle());
         holder.contentTV.setText(model.getContent());
-        ImageLoader.getInstance().displayImage(model.getIconUrl(), holder.imageIV);
+        ImageLoader.getInstance().displayImage(model.getImageUrl(), holder.imageIV);
         holder.itemView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

+ 1 - 1
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -692,7 +692,7 @@ public class MessagePresenter implements OnHttpResultListener {
             if (lastModel != null) {
                 friend.set_id(lastModel.getId());
                 friend.setTimeSend((int) (lastModel.getTimeSend() / 1000));
-                friend.setContent(lastModel.getContent());
+                friend.setContent(lastModel.getTitle());
             } else {
                 friend.setContent("");
             }

+ 34 - 7
app_modular/appmessages/src/main/res/layout/activity_message_web.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -17,12 +16,40 @@
         android:indeterminateDuration="500"
         android:indeterminateOnly="false"
         android:max="100"
-        android:progressDrawable="@drawable/webview_progress_bar"/>
+        android:progressDrawable="@drawable/webview_progress_bar" />
 
-    <com.handmark.pulltorefresh.library.PullToRefreshWebView
-        android:id="@+id/webViewRefresh"
+    <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_below="@id/progressBar"
-        android:background="@color/linen"/>
+        android:layout_below="@id/progressBar">
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="#38373e">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerHorizontal="true"
+                android:layout_marginTop="10dp"
+                android:text="此网页由www.ubtob.com 提供"
+                android:textColor="@color/ivory"
+                android:textSize="@dimen/text_main" />
+        </RelativeLayout>
+
+        <com.module.recyclerlibrary.ui.refresh.webempty.EmptyRefreshLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:fectiveScroll="0dp">
+
+            <WebView
+                android:id="@+id/webView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+        </com.module.recyclerlibrary.ui.refresh.webempty.EmptyRefreshLayout>
+
+    </FrameLayout>
+
+
 </RelativeLayout>

+ 2 - 1
app_modular/appmessages/src/main/res/layout/activity_uuhelper.xml

@@ -16,6 +16,7 @@
         android:padding="10dp">
 
         <ImageView
+            android:id="@+id/inputImg"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="2"
@@ -41,7 +42,7 @@
             style="@style/bottomTextStyle"
             android:layout_weight="5"
             android:background="@color/white"
-            android:text="功能介绍"
+            android:text="功能介绍"
             android:textColor="@drawable/bg_bule_yellow_text" />
 
         <View

+ 1 - 1
app_modular/appmessages/src/main/res/layout/activity_uuhelper_details.xml

@@ -51,7 +51,7 @@
         android:layout_marginLeft="10dp"
         android:layout_toRightOf="@id/tagTV"
         android:gravity="center_vertical"
-        android:text="UU 助手,您身边的移动办公小帮手。在这里,您可以查看CRM、OA等消息通知,还可以了解UU互联的最新动态哦,我们还提供人工智能客户,UU助手随时等候主任的吩咐哦!"
+        android:text="UU 助手,您身边的移动办公小帮手。在这里,您可以查看CRM、OA等消息通知,还可以了解UU互联的最新动态哦,我们还提供人工智能客户,UU助手随时等候主任的吩咐哦!"
         android:textColor="@color/text_main"
         android:textSize="16sp" />
 

+ 9 - 9
app_modular/appmessages/src/main/res/layout/item_uuhelper_single.xml

@@ -2,26 +2,26 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_marginLeft="20dp"
-    android:layout_marginRight="20dp">
+    android:layout_marginLeft="25dp"
+    android:layout_marginRight="25dp">
 
     <TextView
         android:id="@+id/timeTV"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
-        android:layout_marginBottom="8dp"
-        android:layout_marginTop="10dp"
+        android:layout_marginBottom="10dp"
+        android:layout_marginTop="15dp"
         android:background="@drawable/text_hint_bg"
         android:text="2017-11-11"
         android:textColor="@color/white"
-        android:textSize="@dimen/text_main" />
+        android:textSize="@dimen/text_min" />
 
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/timeTV"
-        android:background="@color/white"
+        android:background="@drawable/rl_circular_bg"
         android:paddingLeft="10dp"
         android:paddingRight="10dp">
 
@@ -34,7 +34,7 @@
             android:paddingBottom="5dp"
             android:paddingTop="5dp"
             android:text="titleTV"
-            android:textColor="@color/text_main"
+            android:textColor="@color/black"
             android:textSize="@dimen/text_main" />
 
         <ImageView
@@ -69,13 +69,13 @@
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_below="@+id/line"
+            android:drawableRight="@drawable/oa_next"
             android:ellipsize="end"
             android:lines="1"
             android:paddingBottom="8dp"
             android:paddingTop="8dp"
             android:text="阅读全文"
-            android:layout_below="@+id/line"
-            android:drawableRight="@drawable/oa_next"
             android:textColor="@color/text_main"
             android:textSize="@dimen/text_main" />
     </RelativeLayout>

+ 6 - 6
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/BusinessStateActivity.java

@@ -479,12 +479,12 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
                     int countb = JSONUtil.getInt(object, "countb");
                     int countc = JSONUtil.getInt(object, "countc");
                     int countd = ListUtils.getSize(arrayd);
-                    if (page > 1) {
-                        counta += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_unmanger), 0);
-                        countb += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_manged), 0);
-                        countc += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_timeout), 0);
-                        countd += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_transtered), 0);
-                    }
+//                    if (page > 1) {
+//                        counta += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_unmanger), 0);
+//                        countb += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_manged), 0);
+//                        countc += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_timeout), 0);
+//                        countd += StringUtil.getFirstInt(StringUtil.getTextRexHttp(tv_transtered), 0);
+//                    }
                     CommonUtil.textSpanForStyle(tv_unmanger, counta + getString(R.string.Unscheduled_schedule), String.valueOf(counta), ct.getResources().getColor(R.color.yellow_home));
                     CommonUtil.textSpanForStyle(tv_manged, countb + getString(R.string.Has_been_scheduled), String.valueOf(countb), ct.getResources().getColor(R.color.yellow_home));
                     CommonUtil.textSpanForStyle(tv_timeout, countc + getString(R.string.Will_time_out), String.valueOf(countc), ct.getResources().getColor(R.color.yellow_home));

+ 22 - 5
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/TaskAddErpActivity.java

@@ -54,6 +54,8 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
     private EditText et_task_detail;
     private TagGroup et_task_people;
     private ImageView iv_find;
+    private TextView tv_title;
+    private TextView detailsTV;
     private TextView et_startime;
     private TextView et_endtime;
     private ImageView voice_search_iv;
@@ -62,7 +64,7 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
     private int save = 0;
     private String selectCode = null;
     private int type = 0;
-
+    private boolean timeSelected = false;//是否已经进行选择时间操作
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -74,6 +76,8 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
     private void initIDS() {
 
         voice_search_iv = (ImageView) findViewById(R.id.voice_search_iv);
+        tv_title = (TextView) findViewById(R.id.tv_title);
+        detailsTV = (TextView) findViewById(R.id.detailsTV);
         et_endtime = (TextView) findViewById(R.id.et_endtime);
         et_title = (EditText) findViewById(R.id.et_title);
         et_task_detail = (EditText) findViewById(R.id.et_task_detail);
@@ -97,6 +101,8 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
             switch (type) {
                 case 1:
                     title = R.string.oacreat_calender;
+                    tv_title.setText("日程标题");
+                    detailsTV.setText("任务详情");
                     break;
                 case 2:
                     title = R.string.create_meet_task;
@@ -130,10 +136,16 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
 
     @Override
     public void onClick(View v) {
+        String sT = et_startime.getText().toString();
+        String eT = et_endtime.getText().toString();
         if (v.getId() == R.id.et_startime){
+            if (timeSelected) {
+               sT = sT +":00"; //这里传的跳时间选择界面时需要带上秒,统一考勤界面的时间选择逻辑
+               eT = eT +":00";
+            }
             startActivityForResult(new Intent(mContext, SelectCalendarActivity.class)
-                            .putExtra("startDate", et_startime.getText().toString())
-                            .putExtra("endDate", et_endtime.getText().toString())
+                            .putExtra("startDate", sT)
+                            .putExtra("endDate", eT)
                             .putExtra("hasMenu", false)
                             .putExtra("caller", "Workovertime")
                     , 0x30);
@@ -146,9 +158,13 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
             intent.putExtra(OAConfig.MODEL_DATA, bean);
             startActivityForResult(intent, 0x01);
         }else if (v.getId() == R.id.et_endtime){
+            if (timeSelected) {
+                sT = sT +":00";
+                eT = eT +":00";
+            }
             startActivityForResult(new Intent(mContext, SelectCalendarActivity.class)
-                            .putExtra("startDate", et_startime.getText().toString())
-                            .putExtra("endDate", et_endtime.getText().toString())
+                            .putExtra("startDate", sT)
+                            .putExtra("endDate", eT)
                             .putExtra("hasMenu", false)
                             .putExtra("caller", "Workovertime")
                     , 0x30);
@@ -211,6 +227,7 @@ public class TaskAddErpActivity extends BaseActivity implements View.OnClickList
         }
 
         if (requestCode == 0x30 && resultCode == 0x11) {
+            timeSelected = true;
             String startDate = data.getStringExtra("startDate");
             String endDate = data.getStringExtra("endDate");
 //            startDate=startDate+":00";

+ 20 - 3
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/adapter/SelectAimAdapter.java

@@ -90,9 +90,26 @@ public class SelectAimAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
     private void bindLoadView(LoadViewHolder holder, SelectAimModel model) throws Exception {
         holder.title_tv.setText(getNull(model.getName()));
         holder.sub_tv.setText(getNull(model.getAddress()));
-        holder.time_tv.setText(MyApplication.getInstance().getString(R.string.last_visit)+" " + getNull(model.getTime()));
-        holder.times_tv.setText(MyApplication.getInstance().getString(R.string.visit_num)+" "  + getNull(model.getTimes() + MyApplication.getInstance().getString(R.string.sign_Times)));
-        holder.distance_tv.setText(getKm(BaiduMapUtil.getInstence().getDistance(model.getLatLng())));
+
+        if (model.getLatLng()==null){
+            holder.distance_tv.setVisibility(View.GONE);
+        }else{
+            holder.distance_tv.setVisibility(View.VISIBLE);
+            holder.distance_tv.setText(getKm(BaiduMapUtil.getInstence().getDistance(model.getLatLng())));
+        }
+        if (model.getTimes()==-1){
+            holder.times_tv.setVisibility(View.GONE);
+        }else{
+            holder.times_tv.setVisibility(View.VISIBLE);
+            holder.times_tv.setText(MyApplication.getInstance().getString(R.string.visit_num)+" "  + getNull(model.getTimes() + MyApplication.getInstance().getString(R.string.sign_Times)));
+        }
+        if (StringUtil.isEmpty(model.getTime())){
+            holder.time_tv.setVisibility(View.GONE);
+        }else{
+            holder.time_tv.setVisibility(View.VISIBLE);
+            holder.time_tv.setText(MyApplication.getInstance().getString(R.string.last_visit)+" " + getNull(model.getTime()));
+        }
+
         holder.tag_tv.setVisibility(model.isFirst() ? View.VISIBLE : View.GONE);
         holder.tag_view.setVisibility(model.isFirst() ? View.VISIBLE : View.GONE);
     }

+ 8 - 7
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/presenter/SelectAimPresenter.java

@@ -126,13 +126,13 @@ public class SelectAimPresenter implements OnHttpResultListener {
         param.put("condition", "1=1");
         param.put(isB2b ? "pageNumber" : "pageIndex", 1);
         param.put("pageSize", 1000);
-        String url =isB2b? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getOutAddress: "mobile/getOutAddressDate.action";
-        Request request=new Request.Bulider()
+        String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().getOutAddress : "mobile/getOutAddressDate.action";
+        Request request = new Request.Bulider()
                 .setMode(Request.Mode.GET)
                 .setUrl(url)
                 .setWhat(LOAD)
                 .setParam(param).bulid();
-        OAHttpHelper.getInstance().requestHttp(request,this);
+        OAHttpHelper.getInstance().requestHttp(request, this);
 
     }
 
@@ -153,13 +153,13 @@ public class SelectAimPresenter implements OnHttpResultListener {
         //获取网络数据
         Map<String, Object> param = new HashMap<>();
         param.put("sellercode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        String url ="mobile/crm/getCustomerbySeller.action";
-        Request request=new Request.Bulider()
+        String url = "mobile/crm/getCustomerbySeller.action";
+        Request request = new Request.Bulider()
                 .setMode(Request.Mode.GET)
                 .setUrl(url)
                 .setWhat(LOAD_CUSTOMER)
                 .setParam(param).bulid();
-        OAHttpHelper.getInstance().requestHttp(request,this);
+        OAHttpHelper.getInstance().requestHttp(request, this);
     }
 
     //下载附近数据
@@ -248,7 +248,7 @@ public class SelectAimPresenter implements OnHttpResultListener {
     }
 
     @Override
-    public void error(int what,  String message, Bundle bundle) {
+    public void error(int what, String message, Bundle bundle) {
         if (iSelectAim != null)
             iSelectAim.dimssLoading();
     }
@@ -321,6 +321,7 @@ public class SelectAimPresenter implements OnHttpResultListener {
                 // model.setTimes(object.getInteger("MD_VISITCOUNT"));
                 model.setName(object.getString("CU_NAME"));
                 model.setObject(JSON.toJSONString(object));
+                model.setTimes(-1);
                 //TODO id先不要
 //                model.seti(object.getInteger("MD_ID"));
                 model.setType(2);

+ 29 - 20
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/AddMeetingActivity.java

@@ -85,6 +85,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                     } else {
                         ToastUtil.showToast(ct, "获取id错误");
                     }
+                    submiting = false;
                     break;
                 case whatSignin:
                     JSONObject json = parseObject(message);
@@ -142,6 +143,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                     ToastUtil.showToast(ct, message == null ? "" : StringUtil.getChinese(message));
                     break;
             }
+
         }
     };
 
@@ -199,7 +201,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
         end_tv = (TextView) findViewById(R.id.end_tv);
         users_tv = (TextView) findViewById(R.id.users_tv);
         location_et = (TextView) findViewById(R.id.location_et);
-        name_et= (EditText) findViewById(R.id.name_et);
+        name_et = (EditText) findViewById(R.id.name_et);
         about_et = (EditText) findViewById(R.id.about_et);
         tag_et = (TextView) findViewById(R.id.tag_et);
         user_tv = (TextView) findViewById(R.id.user_tv);
@@ -224,11 +226,11 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
     @Override
     public void onClick(View view) {
         Intent intent = null;
-        if (view.getId() == R.id.start_rl){
+        if (view.getId() == R.id.start_rl) {
             turn2SelectCalendar();
-        }else if (view.getId() ==  R.id.end_rl){
+        } else if (view.getId() == R.id.end_rl) {
             turn2SelectCalendar();
-        }else if (view.getId() == R.id.users_rl){
+        } else if (view.getId() == R.id.users_rl) {
             intent = new Intent("com.modular.main.SelectCollisionActivity");
             SelectCollisionTurnBean bean = new SelectCollisionTurnBean()
                     .setSureText(getString(R.string.common_sure))
@@ -237,18 +239,18 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                     .setSelectCode(getSelectCode());
             intent.putExtra(OAConfig.MODEL_DATA, bean);
             startActivityForResult(intent, 0x21);
-        }else if (view.getId() == R.id.tag_rl){
+        } else if (view.getId() == R.id.tag_rl) {
             getMeetTag();
-        }else if (view.getId() == R.id.location_rl){
+        } else if (view.getId() == R.id.location_rl) {
             getMeetRoom();
-        }else if (view.getId() == R.id.voice_name_iv){
+        } else if (view.getId() == R.id.voice_name_iv) {
             voice_type = 1;
             RecognizerDialog dialog = new RecognizerDialog(this, null);
             dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
             dialog.setParameter(SpeechConstant.ACCENT, "mandarin");
             dialog.setListener(this);
             dialog.show();
-        }else if (view.getId() == R.id.voice_introduce_iv){
+        } else if (view.getId() == R.id.voice_introduce_iv) {
             voice_type = 2;
             RecognizerDialog dialog = new RecognizerDialog(this, null);
             dialog = new RecognizerDialog(this, null);
@@ -256,17 +258,24 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
             dialog.setParameter(SpeechConstant.ACCENT, "mandarin");
             dialog.setListener(this);
             dialog.show();
-        }else if (view.getId() == R.id.bt_save){
-            CommonInterface.getInstance().getCodeByNet("Meetingroomapply", new CommonInterface.OnResultListener() {
-                @Override
-                public void result(boolean isOk, int what, String message) {
-                    ma_code = message;
-                    getIdByNet();
-                }
-            });
+        } else if (view.getId() == R.id.bt_save) {
+            if (submiting) {
+
+            } else {
+                CommonInterface.getInstance().getCodeByNet("Meetingroomapply", new CommonInterface.OnResultListener() {
+                    @Override
+                    public void result(boolean isOk, int what, String message) {
+                        ma_code = message;
+                        getIdByNet();
+                    }
+                });
+                submiting = true;
+            }
         }
     }
 
+    private boolean submiting = false;
+
     private void endOfActivity() {
 //        Intent intent = new Intent();
 //        intent.putExtra("data", "data");
@@ -341,7 +350,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
             @Override
             public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
                 String time = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00";
-                if (tv.getId() == R.id.start_tv){
+                if (tv.getId() == R.id.start_tv) {
                     if (!StringUtil.isEmpty(end_tv.getText().toString())) {
                         if (end_tv.getText().toString().compareTo(time) < 0) {
                             ToastUtil.showToast(ct, R.string.not_time_start_biger_end);
@@ -351,7 +360,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                     } else {
                         start_tv.setText(time);
                     }
-                }else if (tv.getId() == R.id.end_tv){
+                } else if (tv.getId() == R.id.end_tv) {
                     if (time.compareTo(start_tv.getText().toString()) <= 0) {
                         ToastUtil.showToast(ct, R.string.not_time_start_biger_end);
                     } else {
@@ -606,8 +615,8 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
         } else if (requestCode == 0x30 && resultCode == 0x11) {
             String startDate = data.getStringExtra("startDate");
             String endDate = data.getStringExtra("endDate");
-            start_tv.setText(StringUtil.getMessage(startDate)+":00");
-            end_tv.setText(StringUtil.getMessage(endDate)+":00");
+            start_tv.setText(StringUtil.getMessage(startDate) + ":00");
+            end_tv.setText(StringUtil.getMessage(endDate) + ":00");
         }
     }
 

+ 12 - 10
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/ExpenseReimbursementActivity.java

@@ -637,6 +637,16 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
 
     private void doShowFormData(JSONArray formdataArray, List<CommonDocAMBean.DatasBean.FormconfigsBean> mFormconfigsList) {
         if (!ListUtils.isEmpty(mFormconfigsList)  &&  !ListUtils.isEmpty(formdataArray)){
+
+            fb_attach = formdataArray.getJSONObject(0).getString("fb_attach");
+            Log.i("fb_attach_ss",fb_attach+"?");
+            if (!StringUtil.isEmpty(fb_attach)) {
+                getUpdatePicture(); //获取发票图片
+            }else {
+                progressDialog.dismiss();
+            }
+
+
             for (int i = 0; i < mFormconfigsList.size(); i++) {
                 String key = mFormconfigsList.get(i).getFD_FIELD();
                 if (StringUtil.isEmpty(key)) return;
@@ -657,15 +667,6 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
                         break;
                 }
             }
-
-            fb_attach = formdataArray.getJSONObject(0).getString("fb_attach");
-            Log.i("fb_attach_ss",fb_attach+"?");
-            if (!StringUtil.isEmpty(fb_attach)) {
-                getUpdatePicture(); //获取发票图片
-            }else {
-                progressDialog.dismiss();
-            }
-
         }
     }
 
@@ -924,13 +925,14 @@ public class ExpenseReimbursementActivity extends BaseActivity implements View.O
         }else if (v.getId() == R.id.c_equal){
             String stringresult = c_result.getText().toString();
             String nowedit = c_edit.getText().toString();
-
             if (StringUtil.isEmpty(stringresult)){
                 if(!StringUtil.isEmpty(nowedit)){
+                    double d = CommonUtil.getTwoPointDouble(Double.valueOf(nowedit));
                     costFormModel_list.get(et_position).setCost_money(CommonUtil.getTwoPointDouble(Double.valueOf(nowedit)));
                     dtAdapter.notifyDataSetChanged();
                     doAutoCalculateJudge();
                     c_edit.setText(null);
+                    Log.i("left=,right=,d=",stringresult+","+nowedit+","+d);
                     closeCalculatorWindow();
                 }else {
                     ToastMessage("请输入");

+ 0 - 1
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkDailyAddActivity.java

@@ -558,7 +558,6 @@ public class WorkDailyAddActivity extends BaseActivity implements RecognizerDial
                             } else {
                                 Intent intent1 = new Intent("com.modular.work.OAActivity");
                                 intent1.putExtra("WorkDailyAdd", "WorkDailyAdd");
-                                intent1.addCategory("com.modular.work.OAActivity");
                                 startActivity(intent1);
                             }
                             finish();

+ 0 - 4
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/adapter/WorkDailyAdapter.java

@@ -53,10 +53,6 @@ public class WorkDailyAdapter extends BaseAdapter {
         this.mContext = mContext;
     }
 
-//    public List<WorkDailyBean> getmWorkDailyBeanList() {
-//        return mWorkDailyBeanList;
-//    }
-
     public void setmWorkDailyBeanList(List<WorkDailyBean> mWorkDailyBeans) {
         this.mWorkDailyBeanList = mWorkDailyBeans;
     }

+ 1 - 0
app_third/recyclerlibrary/.gitignore

@@ -0,0 +1 @@
+/build

+ 24 - 0
app_third/recyclerlibrary/build.gradle

@@ -0,0 +1,24 @@
+apply plugin: 'com.android.library'
+android {
+    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    buildToolsVersion rootProject.ext.android.buildToolsVersion
+    defaultConfig {
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        versionCode rootProject.ext.android.versionCode
+        versionName rootProject.ext.android.versionName
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(include: ['*.jar'], dir: 'libs')
+    testCompile deps.junit
+    compile deps.appcompatV7
+    compile deps.recyclerviewV7
+}

+ 25 - 0
app_third/recyclerlibrary/proguard-rules.pro

@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Users\Bitliker\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 10 - 0
app_third/recyclerlibrary/src/main/AndroidManifest.xml

@@ -0,0 +1,10 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+
+    package="com.module.recyclerlibrary">
+
+    <application android:allowBackup="true" android:label="@string/app_name"
+        android:supportsRtl="true">
+
+    </application>
+
+</manifest>

+ 3 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/REMAIN.md

@@ -0,0 +1,3 @@
+## 针对RecyclerView 的封装
+
+### refresh 封装下拉刷新和上拉加载,使用

+ 65 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/adapter/BaseRecycAdapter.java

@@ -0,0 +1,65 @@
+package com.module.recyclerlibrary.adapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.module.recyclerlibrary.model.BaseModel;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2017/9/19.
+ */
+
+public abstract class BaseRecycAdapter<T> extends RecyclerView.Adapter<BaseRecycAdapter.ViewHodler> {
+
+    protected Context ct;
+    protected List<BaseModel<T>> datas;
+
+    public BaseRecycAdapter(Context ct) {
+        this(ct, null);
+    }
+
+    public BaseRecycAdapter(Context ct, List<BaseModel<T>> datas) {
+        if (ct == null) {
+            new NullPointerException("ct cannot be null");
+        }
+        this.ct = ct;
+        this.datas = datas;
+    }
+
+    @Override
+    public ViewHodler onCreateViewHolder(ViewGroup parent, int viewType) {
+        return null;
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return datas == null ? 0 : datas.size();
+    }
+
+    public abstract void onBindViewHolder(ViewHodler holder, int position);
+
+    public abstract void onCreateViewHolder(View view, int viewType);
+
+    private LayoutInflater mInflater;
+
+    private LayoutInflater getmInflater() {
+        return mInflater == null ? (mInflater = LayoutInflater.from(ct)) : mInflater;
+    }
+
+
+    protected abstract class ViewHodler extends RecyclerView.ViewHolder {
+        private ViewHodler(View itemView) {
+            super(itemView);
+        }
+
+        public ViewHodler(int layoutId, ViewGroup parent) {
+            this(getmInflater().inflate(layoutId, parent, false));
+        }
+    }
+}

+ 63 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/listener/OnRecyclerClickLister.java

@@ -0,0 +1,63 @@
+package com.module.recyclerlibrary.listener;
+
+import android.support.v4.view.GestureDetectorCompat;
+import android.support.v7.widget.RecyclerView;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.View;
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public abstract class OnRecyclerClickLister implements RecyclerView.OnItemTouchListener {
+
+    private GestureDetectorCompat mGestureDetectorCompat;
+    private RecyclerView mRecyclerView;
+
+    public OnRecyclerClickLister(RecyclerView recyclerView) {
+        mRecyclerView = recyclerView;
+        mGestureDetectorCompat = new GestureDetectorCompat(mRecyclerView.getContext(),
+                new GestureListener());
+    }
+
+    @Override
+    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
+        mGestureDetectorCompat.onTouchEvent(e);
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
+        mGestureDetectorCompat.onTouchEvent(e);
+        return false;
+    }
+
+    @Override
+    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+    }
+
+    public abstract void onItemLongClick(RecyclerView.ViewHolder vh);
+
+    public abstract void onItemClick(RecyclerView.ViewHolder vh);
+
+    private class GestureListener extends GestureDetector.SimpleOnGestureListener {
+        @Override
+        public boolean onSingleTapUp(MotionEvent e) {
+            View childe = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
+            if (childe != null) {
+                RecyclerView.ViewHolder VH = mRecyclerView.getChildViewHolder(childe);
+                onItemClick(VH);
+            }
+            return true;
+        }
+
+        @Override
+        public void onLongPress(MotionEvent e) {
+            View childe = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
+            if (childe != null) {
+                RecyclerView.ViewHolder VH = mRecyclerView.getChildViewHolder(childe);
+                onItemLongClick(VH);
+            }
+        }
+    }
+}

+ 50 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/listener/OnRecyclerItemClickListener.java

@@ -0,0 +1,50 @@
+package com.module.recyclerlibrary.listener;
+
+import android.support.v4.view.GestureDetectorCompat;
+import android.support.v7.widget.RecyclerView;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.View;
+
+/**
+ * 只接受点击事件,当长按一个item时候,也可以触发itemclick
+ */
+public abstract class OnRecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
+    private GestureDetectorCompat mGestureDetectorCompat;
+    private RecyclerView mRecyclerView;
+
+    public OnRecyclerItemClickListener(RecyclerView recyclerView) {
+        mRecyclerView = recyclerView;
+        mGestureDetectorCompat = new GestureDetectorCompat(mRecyclerView.getContext(),
+                new GestureListener());
+    }
+
+    @Override
+    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
+        mGestureDetectorCompat.onTouchEvent(e);
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
+        mGestureDetectorCompat.onTouchEvent(e);
+        return false;
+    }
+
+    @Override
+    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+    }
+
+    public abstract void onItemClick(RecyclerView.ViewHolder vh);
+
+    private class GestureListener extends GestureDetector.SimpleOnGestureListener {
+        @Override
+        public boolean onSingleTapUp(MotionEvent e) {
+            View childe = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
+            if (childe != null) {
+                RecyclerView.ViewHolder VH = mRecyclerView.getChildViewHolder(childe);
+                onItemClick(VH);
+            }
+            return true;
+        }
+    }
+}

+ 51 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/listener/OnRecyclerLongItemClickLister.java

@@ -0,0 +1,51 @@
+package com.module.recyclerlibrary.listener;
+
+import android.support.v4.view.GestureDetectorCompat;
+import android.support.v7.widget.RecyclerView;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.View;
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public abstract class OnRecyclerLongItemClickLister  implements RecyclerView.OnItemTouchListener  {
+
+    private GestureDetectorCompat mGestureDetectorCompat;
+    private RecyclerView mRecyclerView;
+
+    public OnRecyclerLongItemClickLister(RecyclerView recyclerView) {
+        mRecyclerView = recyclerView;
+        mGestureDetectorCompat = new GestureDetectorCompat(mRecyclerView.getContext(),
+                new GestureListener());
+    }
+
+    @Override
+    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
+        mGestureDetectorCompat.onTouchEvent(e);
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
+        mGestureDetectorCompat.onTouchEvent(e);
+        return false;
+    }
+
+    @Override
+    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
+    }
+
+    public abstract void onItemLongClick(RecyclerView.ViewHolder vh);
+
+    private class GestureListener extends GestureDetector.SimpleOnGestureListener {
+        @Override
+        public void onLongPress(MotionEvent e) {
+            View childe = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
+            if (childe != null) {
+                RecyclerView.ViewHolder VH = mRecyclerView.getChildViewHolder(childe);
+                onItemLongClick(VH);
+            }
+        }
+    }
+}

+ 90 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/model/BaseModel.java

@@ -0,0 +1,90 @@
+package com.module.recyclerlibrary.model;
+
+/**
+ * Created by Bitliker on 2017/7/4.
+ */
+
+public class BaseModel<T> {
+    private boolean select;
+    private float sort;
+    private String name;
+    private String sub;
+    private String tag;
+    private T data;
+
+
+    public BaseModel(boolean select, String name, String sub, String tag) {
+        this.select = select;
+        this.name = name;
+        this.sub = sub;
+        this.tag = tag;
+    }
+
+    public BaseModel(String name, String sub, String tag) {
+        this.name = name;
+        this.sub = sub;
+        this.tag = tag;
+    }
+
+    public BaseModel(String name, String sub) {
+        this.name = name;
+        this.sub = sub;
+    }
+
+    public float getSort() {
+        return sort;
+    }
+
+    public void setSort(float sort) {
+        this.sort = sort;
+    }
+
+    public BaseModel(String name) {
+        this.name = name;
+    }
+
+    public BaseModel() {
+    }
+
+    public boolean isSelect() {
+        return select;
+    }
+
+    public void setSelect(boolean select) {
+        this.select = select;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSub() {
+        return sub;
+    }
+
+    public void setSub(String sub) {
+        this.sub = sub;
+    }
+
+    public String getTag() {
+        return tag;
+    }
+
+    public void setTag(String tag) {
+        this.tag = tag;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+
+}

+ 533 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/BaseRefreshLayout.java

@@ -0,0 +1,533 @@
+package com.module.recyclerlibrary.ui.refresh;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebView;
+import android.widget.AdapterView;
+import android.widget.RelativeLayout;
+import android.widget.ScrollView;
+import android.widget.Scroller;
+
+import com.module.recyclerlibrary.R;
+
+
+public abstract class BaseRefreshLayout extends ViewGroup {
+    private boolean mEnablePullDown;// 是否允许下拉刷新
+    private boolean mEnablePullUp;// 是否允许上拉加载
+
+    private Drawable mPullBgDrawable = null;// 拉动部分背景(color|drawable)
+    private onRefreshListener mListener;// 事件监听接口
+
+    private LayoutInflater mInflater;// 布局填充器对象
+    private Scroller mLayoutScroller;  // 用于平滑滑动的Scroller对象
+    private final int SCROLL_SPEED = 650;  // Scroller的滑动速度
+    private int mReachBottomScroll; // 当滚动到内容最底部时Y轴所需要滑动的举例
+    private int mEffectiveScroll; // 最小有效滑动距离(滑动超过该距离才视作一次有效的滑动刷新/加载操作)
+    private int lastChildIndex;// 最后一个content-child-view的index
+    private int mLayoutContentHeight; // ViewGroup的内容高度(不包括header与footer的高度)
+
+    private BaseRefreshView headerView; //头布局
+    private BaseRefreshView footView; //尾布局
+
+    public BaseRefreshLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        TypedArray array = context.obtainStyledAttributes(attrs,
+                R.styleable.BaseRefreshLayout);
+        try {
+            mEnablePullDown = array.getBoolean(R.styleable.BaseRefreshLayout_enablePullDown, true);
+            mEnablePullUp = array.getBoolean(R.styleable.BaseRefreshLayout_enablePullUp, true);
+            mPullBgDrawable = array.getDrawable(R.styleable.BaseRefreshLayout_pullBackground);
+            mEffectiveScroll = (int) array.getDimension(R.styleable.BaseRefreshLayout_fectiveScroll, dip2px(context, -1));
+            if (mEffectiveScroll < 0) {
+                mEffectiveScroll = (int) context.getResources().getDimension(R.dimen.refresh_item_height);
+            }
+        } finally {
+            array.recycle();
+        }
+        // 实例化布局填充器
+        mInflater = LayoutInflater.from(context);
+        // 实例化Scroller
+        mLayoutScroller = new Scroller(context);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        lastChildIndex = getChildCount() - 1;
+        // 添加上拉刷新部分
+        if (mEnablePullDown)
+            addLayoutHeader();
+        // 添加下拉加载部分
+        if (mEnablePullUp)
+            addLayoutFooter();
+    }
+
+    private void addLayoutHeader() {
+        headerView = getHeader(mInflater);
+        // 通过LayoutInflater获取从布局文件中获取header的view对象
+        if (mPullBgDrawable != null)
+            headerView.setBackgroundDrawable(mPullBgDrawable);
+        // 设置布局参数(宽度为MATCH_PARENT,高度为MATCH_PARENT)
+        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams
+                (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
+        // 将Header添加进Layout当中
+        addView(headerView, params);
+    }
+
+
+    /**
+     * 添加下拉加载布局作为footer
+     */
+    private void addLayoutFooter() {
+        // 通过LayoutInflater获取从布局文件中获取footer的view对象
+        footView = getFooter(mInflater);
+        if (mPullBgDrawable != null)
+            footView.setBackgroundDrawable(mPullBgDrawable);
+        // 设置布局参数(宽度为MATCH_PARENT,高度为MATCH_PARENT)
+        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams
+                (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
+        // 将footer添加进Layout当中
+        addView(footView, params);
+    }
+
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        // 遍历进行子视图的测量工作
+        for (int i = 0; i < getChildCount(); i++) {
+            // 通知子视图进行测量
+            View child = getChildAt(i);
+            measureChild(child, widthMeasureSpec, heightMeasureSpec);
+        }
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        // 重置(避免重复累加)
+        mLayoutContentHeight = 0;
+        // 遍历进行子视图的置位工作
+        for (int index = 0; index < getChildCount(); index++) {
+            View child = getChildAt(index);
+            if (child == headerView) { // 头视图隐藏在ViewGroup的顶端
+                child.layout(0, 0 - child.getMeasuredHeight(), child.getMeasuredWidth(), 0);
+            } else if (child == footView) { // 尾视图隐藏在ViewGroup所有内容视图之后
+                child.layout(0, mLayoutContentHeight, child.getMeasuredWidth(), mLayoutContentHeight + child.getMeasuredHeight());
+            } else { // 内容视图根据定义(插入)顺序,按由上到下的顺序在垂直方向进行排列
+                child.layout(0, mLayoutContentHeight, child.getMeasuredWidth(), mLayoutContentHeight + child.getMeasuredHeight());
+                if (index <= lastChildIndex) {
+                    if (child instanceof ScrollView) {
+                        mLayoutContentHeight += getMeasuredHeight();
+                        continue;
+                    }
+                    mLayoutContentHeight += child.getMeasuredHeight();
+                }
+            }
+        }
+        // 计算到达内容最底部时ViewGroup的滑动距离
+        mReachBottomScroll = mLayoutContentHeight - getMeasuredHeight();
+    }
+
+
+    // 普通状态
+    protected final int NORMAL = 0;
+    // 意图刷新
+    protected final int TRY_REFRESH = 1;
+    // 刷新状态
+    protected final int REFRESH = 2;
+    // 意图加载
+    protected final int TRY_LOAD_MORE = 3;
+    // 加载状态
+    protected final int LOAD_MORE = 4;
+    // Layout状态
+    private int status = NORMAL;
+    // 用于计算滑动距离的Y坐标中介
+    private int mLastYMoved;
+    // 用于判断是否拦截触摸事件的Y坐标中介
+    private int mLastYIntercept;
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent event) {
+        boolean intercept = false;
+        // 记录此次触摸事件的y坐标
+        int y = (int) event.getY();
+        // 判断触摸事件类型
+        switch (event.getAction()) {
+            // Down事件
+            case MotionEvent.ACTION_DOWN: {
+                // 记录下本次系列触摸事件的起始点Y坐标
+                mLastYMoved = y;
+                // 不拦截ACTION_DOWN,因为当ACTION_DOWN被拦截,后续所有触摸事件都会被拦截
+                intercept = false;
+                break;
+            }
+            // Move事件
+            case MotionEvent.ACTION_MOVE: {
+                if (y > mLastYIntercept) { // 下滑操作
+                    // 获取最顶部的子视图
+                    View child = getChildAt(0);
+                    if (child instanceof AdapterView) {
+                        intercept = avPullDownIntercept(child);
+                    } else if (child instanceof ScrollView) {
+                        intercept = svPullDownIntercept(child);
+                    } else if (child instanceof RecyclerView) {
+                        intercept = rvPullDownIntercept(child);
+                    } else if (child instanceof WebView) {
+                        intercept = webViewPullDownIntercept(child);
+                    }
+                } else if (y < mLastYIntercept) { // 上拉操作
+                    // 获取最底部的子视图
+                    View child = getChildAt(lastChildIndex);
+                    if (child instanceof AdapterView) {
+                        intercept = avPullUpIntercept(child);
+                    } else if (child instanceof ScrollView) {
+                        intercept = svPullUpIntercept(child);
+                    } else if (child instanceof RecyclerView) {
+                        intercept = rvPullUpIntercept(child);
+                    }
+                } else {
+                    intercept = false;
+                }
+                break;
+            }
+            // Up事件
+            case MotionEvent.ACTION_UP: {
+                intercept = false;
+                break;
+            }
+        }
+        mLastYIntercept = y;
+        return intercept;
+    }
+
+    private boolean avPullDownIntercept(View child) {
+        boolean intercept = true;
+        AdapterView adapterChild = (AdapterView) child;
+        // 判断AbsListView是否已经到达内容最顶部
+        if (adapterChild.getFirstVisiblePosition() != 0
+                || adapterChild.getChildAt(0).getTop() != 0) {
+            // 如果没有达到最顶端,则仍然将事件下放
+            intercept = false;
+        }
+        return intercept;
+    }
+
+    private boolean avPullUpIntercept(View child) {
+        boolean intercept = false;
+        AdapterView adapterChild = (AdapterView) child;
+
+        // 判断AbsListView是否已经到达内容最底部
+        if (adapterChild.getLastVisiblePosition() == adapterChild.getCount() - 1
+                && (adapterChild.getChildAt(adapterChild.getChildCount() - 1).getBottom() == getMeasuredHeight())) {
+            // 如果到达底部,则拦截事件
+            intercept = true;
+        }
+        return intercept;
+    }
+
+    private boolean svPullDownIntercept(View child) {
+        boolean intercept = false;
+        if (child.getScrollY() <= 0) {
+            intercept = true;
+        }
+        return intercept;
+    }
+
+    private boolean svPullUpIntercept(View child) {
+        boolean intercept = false;
+        ScrollView scrollView = (ScrollView) child;
+        View scrollChild = scrollView.getChildAt(0);
+
+        if (scrollView.getScrollY() >= (scrollChild.getHeight() - scrollView.getHeight())) {
+            intercept = true;
+        }
+        return intercept;
+    }
+
+    private boolean webViewPullDownIntercept(View child) {
+        boolean intercept = false;
+        WebView recyclerChild = (WebView) child;
+        if (recyclerChild.getScrollY() == 0) {
+            intercept = true;
+        }
+        return intercept;
+    }
+
+    private boolean rvPullDownIntercept(View child) {
+        boolean intercept = false;
+
+        RecyclerView recyclerChild = (RecyclerView) child;
+        if (recyclerChild.computeVerticalScrollOffset() <= 0)
+            intercept = true;
+
+        return intercept;
+    }
+
+    private boolean rvPullUpIntercept(View child) {
+        boolean intercept = false;
+
+        RecyclerView recyclerChild = (RecyclerView) child;
+        if (recyclerChild.computeVerticalScrollExtent() + recyclerChild.computeVerticalScrollOffset()
+                >= recyclerChild.computeVerticalScrollRange())
+            intercept = true;
+
+        return intercept;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        int y = (int) event.getY();
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_MOVE: {
+                // 计算本次滑动的Y轴增量(距离)
+                int dy = mLastYMoved - y;
+                // 如果滑动增量小于0,即下拉操作
+                if (dy < 0) {
+                    if (mEnablePullDown) {
+                        // 如果下拉的距离小于mLayoutHeader1/2的高度,则允许滑动
+                        if (getScrollY() > 0 || Math.abs(getScrollY()) <= headerView.getMeasuredHeight() / 2) {
+                            if (status != TRY_LOAD_MORE && status != LOAD_MORE) {
+                                scrollBy(0, dy);
+                                if (status != REFRESH) {
+                                    if (getScrollY() <= 0) {
+                                        if (status != TRY_REFRESH) {
+                                            updateStatus(TRY_REFRESH);
+                                        } else if (Math.abs(getScrollY()) > mEffectiveScroll) {
+                                            updateStatus(REFRESH);
+                                        }
+                                    }
+                                }
+                            } else {
+                                if (getScrollY() > 0) {
+                                    dy = dy > 30 ? 30 : dy;
+                                    scrollBy(0, dy);
+                                    if (getScrollY() < mReachBottomScroll + mEffectiveScroll) {
+                                        updateStatus(TRY_LOAD_MORE);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                } else if (dy > 0) {
+                    if (mEnablePullUp) {
+                        if (getScrollY() <= mReachBottomScroll + footView.getMeasuredHeight() / 2) {
+                            // 进行Y轴上的滑动
+                            if (status != TRY_REFRESH && status != REFRESH) {
+                                scrollBy(0, dy);
+                                if (status != LOAD_MORE) {
+                                    if (getScrollY() >= mReachBottomScroll) {
+                                        if (status != TRY_LOAD_MORE)
+                                            updateStatus(TRY_LOAD_MORE);
+
+                                        if (getScrollY() >= mReachBottomScroll + mEffectiveScroll)
+                                            updateStatus(LOAD_MORE);
+                                    }
+                                }
+                            } else {
+                                if (getScrollY() <= 0) {
+                                    dy = dy > 30 ? 30 : dy;
+                                    scrollBy(0, dy);
+                                    if (Math.abs(getScrollY()) < mEffectiveScroll)
+                                        updateStatus(TRY_REFRESH);
+                                }
+                            }
+                        }
+                    }
+                }
+                // 记录y坐标
+                mLastYMoved = y;
+                break;
+            }
+            case MotionEvent.ACTION_UP: {
+                // 判断本次触摸系列事件结束时,Layout的状态
+                switch (status) {
+                    case NORMAL: {
+                        upWithStatusNormal();
+                        break;
+                    }
+                    case TRY_REFRESH: {
+                        upWithStatusTryRefresh();
+                        break;
+                    }
+
+                    case REFRESH: {
+                        upWithStatusRefresh();
+                        break;
+                    }
+
+                    case TRY_LOAD_MORE: {
+                        upWithStatusTryLoadMore();
+                        break;
+                    }
+
+                    case LOAD_MORE: {
+                        upWithStatusLoadMore();
+                        break;
+                    }
+                }
+            }
+        }
+        mLastYIntercept = 0;
+        postInvalidate();
+        return true;
+    }
+
+    private void updateStatus(int status) {
+        if (footView != null) {
+            footView.upStatus(status);
+        }
+        if (headerView != null) {
+            headerView.upStatus(status);
+        }
+        if (status != NORMAL) {
+            this.status = status;
+        }
+    }
+
+    private void upWithStatusNormal() {
+
+    }
+
+    private void upWithStatusTryRefresh() {
+        // 取消本次的滑动
+        mLayoutScroller.startScroll(0, getScrollY(), 0, -getScrollY(), SCROLL_SPEED);
+        status = NORMAL;
+        if (headerView != null) {
+            headerView.stopAnim();
+        }
+    }
+
+
+    private void upWithStatusRefresh() {
+        mLayoutScroller.startScroll(0, getScrollY(), 0, -(getScrollY() - (-mEffectiveScroll)), SCROLL_SPEED);
+        if (headerView != null) {
+            headerView.startAnim();
+        }
+        // 通过Listener接口执行刷新时的监听事件
+        if (mListener != null) {
+            mListener.onRefresh();
+        }
+    }
+
+    private void upWithStatusTryLoadMore() {
+        //取消加载
+        mLayoutScroller.startScroll(0, getScrollY(), 0, -(getScrollY() - mReachBottomScroll), SCROLL_SPEED);
+        status = NORMAL;
+        if (footView != null) {
+            footView.stopAnim();
+        }
+    }
+
+
+    private void upWithStatusLoadMore() {
+        //加载
+        mLayoutScroller.startScroll(0, getScrollY(), 0, -((getScrollY() - mEffectiveScroll) - mReachBottomScroll), SCROLL_SPEED);
+        if (footView != null) {
+            footView.startAnim();
+        }
+        // 通过Listener接口执行加载时的监听事件
+        if (mListener != null) {
+            mListener.onLoadMore();
+        }
+    }
+
+
+    @Override
+    public void computeScroll() {
+        super.computeScroll();
+        if (mLayoutScroller.computeScrollOffset()) {
+            scrollTo(0, mLayoutScroller.getCurrY());
+        }
+        postInvalidate();
+    }
+
+    private final int STOP_REFRESH = 1;
+    private final int STOP_LOAD_MORE = 2;
+
+    private Handler mUIHandler = new Handler(Looper.getMainLooper()) {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case STOP_REFRESH: {
+                    mLayoutScroller.startScroll(0, getScrollY(), 0, -getScrollY(), SCROLL_SPEED);
+                    status = NORMAL;
+                    if (headerView != null) {
+                        headerView.stopAnim();
+                    }
+                    break;
+                }
+                case STOP_LOAD_MORE: {
+                    mLayoutScroller.startScroll(0, getScrollY(), 0, -(getScrollY() - mReachBottomScroll), SCROLL_SPEED);
+                    status = NORMAL;
+                    if (footView != null) {
+                        footView.stopAnim();
+                    }
+                    break;
+                }
+            }
+        }
+    };
+
+    private int dip2px(Context context, float dpValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+
+    private void stopTryRefresh() {
+        Message msg = mUIHandler.obtainMessage(STOP_REFRESH);
+        mUIHandler.sendMessage(msg);
+    }
+
+    private void stopTryLoadMore() {
+        Message msg = mUIHandler.obtainMessage(STOP_LOAD_MORE);
+        mUIHandler.sendMessage(msg);
+    }
+
+    public void stopRefresh() {
+        if (status == LOAD_MORE) {
+            stopTryLoadMore();
+        } else if (status == REFRESH) {
+            stopTryRefresh();
+        }
+        status = NORMAL;
+    }
+
+    public boolean isRefreshing() {
+        return status == LOAD_MORE || status == REFRESH;
+    }
+
+    public void setEnabledPullUp(boolean enabledPullUp) {
+        this.mEnablePullUp = enabledPullUp;
+        if (!mEnablePullUp) {
+            if (footView != null && footView.isShown())
+                footView.setVisibility(View.GONE);
+        }
+    }
+
+    public void setOnRefreshListener(onRefreshListener listener) {
+        mListener = listener;
+    }
+
+    public interface onRefreshListener {
+        void onRefresh();
+
+        void onLoadMore();
+    }
+
+
+    protected abstract BaseRefreshView getHeader(LayoutInflater mInflater);
+
+    protected abstract BaseRefreshView getFooter(LayoutInflater mInflater);
+
+
+}

+ 36 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/BaseRefreshView.java

@@ -0,0 +1,36 @@
+package com.module.recyclerlibrary.ui.refresh;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.widget.RelativeLayout;
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public abstract class BaseRefreshView extends RelativeLayout {
+    // 普通状态
+    protected final int NORMAL = 0;
+    // 意图刷新
+    protected final int TRY_REFRESH = 1;
+    // 刷新状态
+    protected final int REFRESH = 2;
+    // 意图加载
+    protected final int TRY_LOAD_MORE = 3;
+    // 加载状态
+    protected final int LOAD_MORE = 4;
+
+
+    public BaseRefreshView(Context context, LayoutInflater mInflater) {
+        super(context);
+    }
+
+
+    public abstract void startAnim();
+
+    public abstract void stopAnim();
+
+    public abstract void upStatus(int status);
+
+
+}

+ 56 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/simlpe/SimpleRefreshFooter.java

@@ -0,0 +1,56 @@
+package com.module.recyclerlibrary.ui.refresh.simlpe;
+
+import android.content.Context;
+import android.graphics.drawable.AnimationDrawable;
+import android.view.LayoutInflater;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.module.recyclerlibrary.R;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public class SimpleRefreshFooter extends BaseRefreshView {
+    private TextView statusTV;
+    private ImageView statusImg;
+
+    public SimpleRefreshFooter(Context context, LayoutInflater mInflater) {
+        super(context, mInflater);
+        mInflater.inflate(R.layout.refresh_footer, this);
+        statusImg = (ImageView) findViewById(R.id.statusImg);
+        statusTV = (TextView) findViewById(R.id.statusTV);
+    }
+
+
+    @Override
+    public void startAnim() {
+        statusTV.setText(R.string.refreshing);
+        statusImg.setImageResource(R.drawable.progress_round);
+        AnimationDrawable animationDrawable = (AnimationDrawable) statusImg.getDrawable();
+        animationDrawable.start();
+    }
+
+    @Override
+    public void stopAnim() {
+        statusImg.setImageResource(R.drawable.pull_up);
+        statusTV.setText(R.string.pull_up_to_load);
+    }
+
+    @Override
+    public void upStatus(int status) {
+        switch (status) {
+            case TRY_LOAD_MORE:
+                statusTV.setText(R.string.pull_up_to_load);
+                statusImg.setImageResource(R.drawable.pull_up);
+                break;
+            case LOAD_MORE:
+                statusTV.setText(R.string.up_to_load);
+                statusImg.setImageResource(R.drawable.pull_down);
+                break;
+        }
+    }
+}

+ 61 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/simlpe/SimpleRefreshHeader.java

@@ -0,0 +1,61 @@
+package com.module.recyclerlibrary.ui.refresh.simlpe;
+
+import android.content.Context;
+import android.graphics.drawable.AnimationDrawable;
+import android.view.LayoutInflater;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.module.recyclerlibrary.R;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public class SimpleRefreshHeader extends BaseRefreshView {
+    private TextView statusTV;
+    private ImageView statusImg;
+
+    public SimpleRefreshHeader(Context context, LayoutInflater mInflater) {
+        super(context, mInflater);
+        mInflater.inflate(R.layout.refresh_header, this);
+        statusImg = (ImageView) findViewById(R.id.statusImg);
+        statusTV = (TextView) findViewById(R.id.statusTV);
+
+    }
+    public void hintAll(){
+        statusImg.setVisibility(GONE);
+        statusTV.setVisibility(GONE);
+    }
+
+
+    @Override
+    public void startAnim() {
+        statusTV.setText(R.string.refreshing);
+        statusImg.setImageResource(R.drawable.progress_round);
+        AnimationDrawable animationDrawable = (AnimationDrawable) statusImg.getDrawable();
+        animationDrawable.start();
+    }
+
+    @Override
+    public void stopAnim() {
+        statusImg.setImageResource(R.drawable.pull_down);
+        statusTV.setText(R.string.pull_down_to_refresh);
+    }
+
+    @Override
+    public void upStatus(int status) {
+        switch (status) {
+            case TRY_REFRESH:
+                statusTV.setText(R.string.pull_down_to_refresh);
+                statusImg.setImageResource(R.drawable.pull_down);
+                break;
+            case REFRESH:
+                statusTV.setText(R.string.up_to_refresh);
+                statusImg.setImageResource(R.drawable.pull_up);
+                break;
+        }
+    }
+}

+ 30 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/simlpe/SimpleRefreshLayout.java

@@ -0,0 +1,30 @@
+package com.module.recyclerlibrary.ui.refresh.simlpe;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshLayout;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public class SimpleRefreshLayout extends BaseRefreshLayout {
+
+    public SimpleRefreshLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected BaseRefreshView getHeader(LayoutInflater mInflater) {
+        return new SimpleRefreshHeader(getContext(),mInflater);
+    }
+
+    @Override
+    protected BaseRefreshView getFooter(LayoutInflater mInflater) {
+        return new SimpleRefreshFooter(getContext(),mInflater);
+    }
+}

+ 156 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/EatBeanLoadingView.java

@@ -0,0 +1,156 @@
+package com.module.recyclerlibrary.ui.refresh.smart;
+        
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+
+public class EatBeanLoadingView extends View {
+
+    private Paint mPaint, mPaintEye;
+
+    private float mWidth = 0f;
+    private float mHigh = 0f;
+    private float mPadding = 5f;
+
+    private float eatErWidth = 60f;
+    private float eatErPositonX = 0f;
+    int eatSpeed = 5;
+    private float beansWidth = 10f;
+
+
+    private float mAngle = 34;
+    private float eatErStrtAngle = mAngle;
+    private float eatErEndAngle = 360 - 2 * eatErStrtAngle;
+
+
+    public EatBeanLoadingView(Context context) {
+        this(context, null);
+    }
+
+    public EatBeanLoadingView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public EatBeanLoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        initPaint();
+
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        mWidth = getMeasuredWidth();
+        mHigh = getMeasuredHeight();
+    }
+
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        float eatRightX = mPadding + eatErWidth + eatErPositonX;
+        RectF rectF = new RectF(mPadding + eatErPositonX, mHigh / 2 - eatErWidth / 2, eatRightX, mHigh / 2 + eatErWidth / 2);
+        canvas.drawArc(rectF, eatErStrtAngle, eatErEndAngle
+                , true, mPaint);
+        canvas.drawCircle(mPadding + eatErPositonX + eatErWidth / 2,
+                mHigh / 2 - eatErWidth / 4,
+                beansWidth / 2, mPaintEye);
+
+        int beansCount = (int) ((mWidth - mPadding * 2 - eatErWidth) / beansWidth / 2);
+        for (int i = 0; i < beansCount; i++) {
+
+            float x = beansCount * i + beansWidth / 2 + mPadding + eatErWidth;
+            if (x > eatRightX) {
+                canvas.drawCircle(x,
+                        mHigh / 2, beansWidth / 2, mPaint);
+            }
+        }
+
+
+    }
+
+    private void initPaint() {
+        mPaint = new Paint();
+        mPaint.setAntiAlias(true);
+        mPaint.setStyle(Paint.Style.FILL);
+        mPaint.setColor(Color.GRAY);
+
+        mPaintEye = new Paint();
+        mPaintEye.setAntiAlias(true);
+        mPaintEye.setStyle(Paint.Style.FILL);
+        mPaintEye.setColor(Color.BLACK);
+
+    }
+
+    public void startAnim() {
+        stopAnim();
+        startViewAnim(0f, 1f, 3500);
+    }
+
+    public void stopAnim() {
+        if (valueAnimator != null) {
+            clearAnimation();
+            valueAnimator.setRepeatCount(0);
+            valueAnimator.cancel();
+            valueAnimator.end();
+            eatErPositonX = 0;
+            postInvalidate();
+        }
+    }
+
+    ValueAnimator valueAnimator = null;
+
+    private ValueAnimator startViewAnim(float startF, final float endF, long time) {
+        valueAnimator = ValueAnimator.ofFloat(startF, endF);
+        valueAnimator.setDuration(time);
+        valueAnimator.setInterpolator(new LinearInterpolator());
+        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环
+        valueAnimator.setRepeatMode(ValueAnimator.RESTART);
+        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator valueAnimator) {
+
+                float mAnimatedValue = (float) valueAnimator.getAnimatedValue();
+                eatErPositonX = (mWidth - 2 * mPadding - eatErWidth) * mAnimatedValue;
+                eatErStrtAngle = mAngle * (1 - (mAnimatedValue * eatSpeed - (int) (mAnimatedValue * eatSpeed)));
+                eatErEndAngle = 360 - eatErStrtAngle * 2;
+                invalidate();
+            }
+        });
+        valueAnimator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                super.onAnimationEnd(animation);
+
+            }
+
+            @Override
+            public void onAnimationStart(Animator animation) {
+                super.onAnimationStart(animation);
+            }
+
+            @Override
+            public void onAnimationRepeat(Animator animation) {
+                super.onAnimationRepeat(animation);
+            }
+        });
+        if (!valueAnimator.isRunning()) {
+            valueAnimator.start();
+
+        }
+
+        return valueAnimator;
+    }
+
+
+}
+

+ 283 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/GhostLoadingView.java

@@ -0,0 +1,283 @@
+package com.module.recyclerlibrary.ui.refresh.smart;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+
+public class GhostLoadingView extends View {
+
+    float mWidth = 0f;
+    float mHeight = 0f;
+    Paint mPaint, mPaintHand, mPaintShadow, mPaintArms;
+    RectF rectFGhost = new RectF();
+    RectF rectFGhostShadow = new RectF();
+    float mPadding = 0f;
+    int mskirtH = 0;
+    Path path = new Path();
+
+    public GhostLoadingView(Context context) {
+        this(context, null);
+    }
+
+    public GhostLoadingView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public GhostLoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        initPaint();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        mWidth = getMeasuredWidth();
+        mHeight = getMeasuredHeight();
+        mPadding = 10;
+        mskirtH = (int) (mWidth / 40);
+    }
+
+    private void initPaint() {
+        mPaint = new Paint();
+        mPaint.setAntiAlias(true);
+        mPaint.setStyle(Paint.Style.FILL);
+        mPaint.setColor(Color.GRAY);
+        mPaintHand = new Paint();
+        mPaintHand.setAntiAlias(true);
+        mPaintHand.setStyle(Paint.Style.FILL);
+        mPaintHand.setColor(Color.argb(220, 0, 0, 0));
+
+        mPaintShadow = new Paint();
+        mPaintShadow.setAntiAlias(true);
+        mPaintShadow.setStyle(Paint.Style.FILL);
+        mPaintShadow.setColor(Color.argb(60, 0, 0, 0));
+
+
+        mPaintArms = new Paint();
+        mPaintArms.setAntiAlias(true);
+        mPaintArms.setStrokeWidth(8);
+        mPaintArms.setStyle(Paint.Style.FILL);
+        mPaintArms.setColor(Color.argb(150, 0, 0, 0));
+    }
+
+
+    private void drawShadow(Canvas canvas) {
+        canvas.drawArc(rectFGhostShadow, 0, 360, false, mPaintShadow);
+
+    }
+
+
+    private void drawHead(Canvas canvas) {
+        canvas.drawCircle(rectFGhost.left + rectFGhost.width() / 2
+                , rectFGhost.width() / 2 + rectFGhost.top
+                , rectFGhost.width() / 2 - 15
+                , mPaint
+        );
+    }
+
+    private void drawHand(Canvas canvas) {
+        canvas.drawCircle(rectFGhost.left + rectFGhost.width() / 2 - mskirtH * 3 / 2 + mskirtH * onAnimationRepeatFlag
+                , rectFGhost.width() / 2 + mskirtH + rectFGhost.top,
+                mskirtH * 0.9f, mPaintHand
+        );
+        canvas.drawCircle(rectFGhost.left + rectFGhost.width() / 2 + mskirtH * 3 / 2 + mskirtH * onAnimationRepeatFlag
+                , rectFGhost.width() / 2 + mskirtH + rectFGhost.top,
+                mskirtH * 0.9f, mPaintHand
+        );
+
+
+    }
+
+
+    float wSpace = 10f;
+    float hSpace = 10f;
+
+    private void drawBody(Canvas canvas) {
+        path.reset();
+
+        float x = (float) ((rectFGhost.width() / 2 - 15) * Math.cos(5 * Math.PI / 180f));
+        float y = (float) ((rectFGhost.width() / 2 - 15) * Math.sin(5 * Math.PI / 180f));
+
+        float x2 = (float) ((rectFGhost.width() / 2 - 15) * Math.cos(175 * Math.PI / 180f));
+        float y2 = (float) ((rectFGhost.width() / 2 - 15) * Math.sin(175 * Math.PI / 180f));
+
+
+        path.moveTo(rectFGhost.left + rectFGhost.width() / 2 - x, rectFGhost.width() / 2 - y + rectFGhost.top);
+        path.lineTo(rectFGhost.left + rectFGhost.width() / 2 - x2, rectFGhost.width() / 2 - y2 + rectFGhost.top);
+        path.quadTo(rectFGhost.right + wSpace / 2, rectFGhost.bottom
+                , rectFGhost.right - wSpace, rectFGhost.bottom - hSpace);
+
+
+        float a = mskirtH;
+
+        float m = (rectFGhost.width() - 2 * wSpace) / 7f;
+
+        for (int i = 0; i < 7; i++) {
+            if (i % 2 == 0) {
+                path.quadTo(rectFGhost.right - wSpace - m * i - (m / 2), rectFGhost.bottom - hSpace - a
+                        , rectFGhost.right - wSpace - (m * (i + 1)), rectFGhost.bottom - hSpace);
+            } else {
+                path.quadTo(rectFGhost.right - wSpace - m * i - (m / 2), rectFGhost.bottom - hSpace + a
+                        , rectFGhost.right - wSpace - (m * (i + 1)), rectFGhost.bottom - hSpace);
+
+            }
+        }
+
+        path.quadTo(rectFGhost.left - 5, rectFGhost.bottom
+                , rectFGhost.left + rectFGhost.width() / 2 - x, rectFGhost.width() / 2 - y + rectFGhost.top);
+
+
+        path.close();
+        canvas.drawPath(path, mPaint);
+
+
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        canvas.save();
+
+        float distance = (mWidth - 2 * mPadding) / 3 * 2 * mAnimatedValue;
+
+        rectFGhost.left = mPadding + distance;
+        rectFGhost.right = (mWidth - 2 * mPadding) / 3 + distance;
+        float moveY = 0f;
+        float moveYMax = mHeight / 4f / 2f;
+        float shadowHighMax = 5f;
+        float shadowHigh = 0f;
+
+        if (mAnimatedValue <= 0.25) {
+            moveY = (float) (moveYMax / 0.25 * mAnimatedValue);
+            rectFGhost.top = moveY;
+
+            rectFGhost.bottom = mHeight / 4 * 3 + moveY;
+
+            shadowHigh = shadowHighMax / 0.25f * mAnimatedValue;
+
+
+        } else if (mAnimatedValue > 0.25 && mAnimatedValue <= 0.5f) {
+
+            moveY = (float) (moveYMax / 0.25 * (mAnimatedValue - 0.25f));
+            rectFGhost.top = moveYMax - moveY;
+            rectFGhost.bottom = mHeight / 4 * 3 + moveYMax - moveY;
+
+            shadowHigh = shadowHighMax - shadowHighMax / 0.25f * (mAnimatedValue - 0.25f);
+
+        } else if (mAnimatedValue > 0.5 && mAnimatedValue <= 0.75f) {
+            moveY = (float) (moveYMax / 0.25 * (mAnimatedValue - 0.5f));
+            rectFGhost.top = moveY;
+            rectFGhost.bottom = mHeight / 4 * 3 + moveY;
+            shadowHigh = shadowHighMax / 0.25f * (mAnimatedValue - 0.5f);
+
+
+        } else if (mAnimatedValue > 0.75 && mAnimatedValue <= 1f) {
+            moveY = (float) (moveYMax / 0.25 * (mAnimatedValue - 0.75f));
+            rectFGhost.top = moveYMax - moveY;
+            rectFGhost.bottom = mHeight / 4 * 3 + moveYMax - moveY;
+            shadowHigh = shadowHighMax - shadowHighMax / 0.25f * (mAnimatedValue - 0.75f);
+
+        }
+
+
+        rectFGhostShadow.top = mHeight - 25 + shadowHigh;
+        rectFGhostShadow.bottom = mHeight - 5 - shadowHigh;
+        rectFGhostShadow.left = rectFGhost.left + 5 + shadowHigh * 3;
+        rectFGhostShadow.right = rectFGhost.right - 5 - shadowHigh * 3;
+        drawShadow(canvas);
+        drawHead(canvas);
+        drawBody(canvas);
+        drawHand(canvas);
+        canvas.restore();
+
+    }
+
+
+    public void startAnim() {
+        stopAnim();
+        startViewAnim(0f, 1f, 2500);
+    }
+
+    private ValueAnimator valueAnimator;
+    private float mAnimatedValue = 0.f;
+
+    public void stopAnim() {
+        if (valueAnimator != null) {
+            clearAnimation();
+            valueAnimator.setRepeatCount(0);
+            valueAnimator.cancel();
+            valueAnimator.end();
+            mAnimatedValue = 0f;
+            wSpace = 10;
+            onAnimationRepeatFlag = 1;
+            postInvalidate();
+        }
+    }
+
+    int onAnimationRepeatFlag = 1;
+
+    private ValueAnimator startViewAnim(float startF, final float endF, long time) {
+        valueAnimator = ValueAnimator.ofFloat(startF, endF);
+        valueAnimator.setDuration(time);
+        valueAnimator.setInterpolator(new LinearInterpolator());
+        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环
+        valueAnimator.setRepeatMode(ValueAnimator.REVERSE);
+        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator valueAnimator) {
+
+                mAnimatedValue = (float) valueAnimator.getAnimatedValue();
+
+                invalidate();
+            }
+        });
+        valueAnimator.addListener(new AnimatorListenerAdapter() {
+
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                super.onAnimationEnd(animation);
+            }
+
+            @Override
+            public void onAnimationStart(Animator animation) {
+                super.onAnimationStart(animation);
+
+            }
+
+            @Override
+            public void onAnimationRepeat(Animator animation) {
+                super.onAnimationRepeat(animation);
+                onAnimationRepeatFlag = onAnimationRepeatFlag * -1;
+
+                if (onAnimationRepeatFlag == -1) {
+                    wSpace = 22;
+                } else {
+                    wSpace = -2;
+                }
+
+
+            }
+
+        });
+        if (!valueAnimator.isRunning()) {
+            wSpace = -2;
+            valueAnimator.start();
+
+        }
+
+        return valueAnimator;
+    }
+
+
+}
+

+ 61 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/SmartRefreshFooter.java

@@ -0,0 +1,61 @@
+package com.module.recyclerlibrary.ui.refresh.smart;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.module.recyclerlibrary.R;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public class SmartRefreshFooter extends BaseRefreshView {
+    EatBeanLoadingView ghostLoadingView;
+    TextView statusTV;
+    private final ImageView statusImg;
+
+    public SmartRefreshFooter(Context context, LayoutInflater mInflater) {
+        super(context, mInflater);
+        mInflater.inflate(R.layout.refresh_smart_footer, this);
+        ghostLoadingView = (EatBeanLoadingView) findViewById(R.id.srl_elv_pull_up);
+        statusTV = (TextView) findViewById(R.id.statusTV);
+        statusImg = (ImageView) findViewById(R.id.statusImg);
+    }
+
+    @Override
+    public void startAnim() {
+        statusTV.setVisibility(GONE);
+        statusTV.setText(R.string.pull_up_to_load);
+        statusImg.setImageResource(R.drawable.pull_up);
+        statusImg.setVisibility(GONE);
+        ghostLoadingView.setVisibility(VISIBLE);
+        ghostLoadingView.startAnim();
+    }
+
+    @Override
+    public void stopAnim() {
+        ghostLoadingView.stopAnim();
+        statusTV.setVisibility(VISIBLE);
+        statusImg.setVisibility(VISIBLE);
+        ghostLoadingView.setVisibility(GONE);
+
+    }
+
+
+    @Override
+    public void upStatus(int status) {
+        switch (status) {
+            case TRY_LOAD_MORE:
+                statusTV.setText(R.string.pull_up_to_load);
+                statusImg.setImageResource(R.drawable.pull_up);
+                break;
+            case LOAD_MORE:
+                statusTV.setText(R.string.up_to_load);
+                statusImg.setImageResource(R.drawable.pull_down);
+                break;
+        }
+    }
+}

+ 61 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/SmartRefreshHeader.java

@@ -0,0 +1,61 @@
+package com.module.recyclerlibrary.ui.refresh.smart;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.module.recyclerlibrary.R;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public class SmartRefreshHeader extends BaseRefreshView {
+    GhostLoadingView ghostLoadingView;
+    TextView statusTV;
+    private final ImageView statusImg;
+
+    public SmartRefreshHeader(Context context, LayoutInflater mInflater) {
+        super(context, mInflater);
+        mInflater.inflate(R.layout.refresh_smart_header, this);
+        ghostLoadingView = (GhostLoadingView) findViewById(R.id.srl_glv_pull_down);
+        statusTV = (TextView) findViewById(R.id.statusTV);
+        statusImg = (ImageView) findViewById(R.id.statusImg);
+
+    }
+
+    @Override
+    public void startAnim() {
+        statusTV.setVisibility(GONE);
+        statusImg.setVisibility(GONE);
+        statusTV.setText(R.string.pull_down_to_refresh);
+        statusImg.setImageResource(R.drawable.pull_down);
+        ghostLoadingView.setVisibility(VISIBLE);
+        ghostLoadingView.startAnim();
+    }
+
+    @Override
+    public void stopAnim() {
+        ghostLoadingView.stopAnim();
+        statusTV.setVisibility(VISIBLE);
+        statusImg.setVisibility(VISIBLE);
+        ghostLoadingView.setVisibility(GONE);
+
+    }
+
+    @Override
+    public void upStatus(int status) {
+        switch (status) {
+            case TRY_REFRESH:
+                statusTV.setText(R.string.pull_down_to_refresh);
+                statusImg.setImageResource(R.drawable.pull_down);
+                break;
+            case REFRESH:
+                statusTV.setText(R.string.up_to_refresh);
+                statusImg.setImageResource(R.drawable.pull_up);
+                break;
+        }
+    }
+}

+ 29 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/smart/SmartRefreshLayout.java

@@ -0,0 +1,29 @@
+package com.module.recyclerlibrary.ui.refresh.smart;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshLayout;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+
+/**
+ * Created by Bitliker on 2017/9/18.
+ */
+
+public class SmartRefreshLayout extends BaseRefreshLayout {
+
+    public SmartRefreshLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected BaseRefreshView getHeader(LayoutInflater mInflater) {
+        return new SmartRefreshHeader(getContext(), mInflater);
+    }
+
+    @Override
+    protected BaseRefreshView getFooter(LayoutInflater mInflater) {
+        return new SmartRefreshFooter(getContext(), mInflater);
+    }
+}

+ 33 - 0
app_third/recyclerlibrary/src/main/java/com/module/recyclerlibrary/ui/refresh/webempty/EmptyRefreshLayout.java

@@ -0,0 +1,33 @@
+package com.module.recyclerlibrary.ui.refresh.webempty;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshLayout;
+import com.module.recyclerlibrary.ui.refresh.BaseRefreshView;
+import com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshFooter;
+import com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshHeader;
+
+/**
+ * Created by Bitliker on 2017/9/19.
+ */
+
+public class EmptyRefreshLayout extends BaseRefreshLayout {
+
+    public EmptyRefreshLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected BaseRefreshView getHeader(LayoutInflater mInflater) {
+        SimpleRefreshHeader baseRefreshView = new SimpleRefreshHeader(getContext(), mInflater);
+        baseRefreshView.hintAll();
+        return baseRefreshView;
+    }
+
+    @Override
+    protected BaseRefreshView getFooter(LayoutInflater mInflater) {
+        return new SimpleRefreshFooter(getContext(), mInflater);
+    }
+}

BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_01.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_02.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_03.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_04.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_05.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_06.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_07.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_08.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_09.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_10.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_11.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/loading_12.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/pull_down.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-hdpi/pull_up.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-xhdpi/pull_down.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-xhdpi/pull_up.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-xxhdpi/pull_down.png


BIN
app_third/recyclerlibrary/src/main/res/drawable-xxhdpi/pull_up.png


+ 40 - 0
app_third/recyclerlibrary/src/main/res/drawable/progress_round.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
+    android:oneshot="false" >
+    <item
+        android:drawable="@drawable/loading_01"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_02"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_03"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_04"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_05"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_06"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_07"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_08"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_09"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_10"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_11"
+        android:duration="30"/>
+    <item
+        android:drawable="@drawable/loading_12"
+        android:duration="30"/>
+</animation-list>

+ 28 - 0
app_third/recyclerlibrary/src/main/res/layout/refresh_footer.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_horizontal"
+    android:gravity="center_horizontal"
+    android:paddingBottom="8dp"
+    android:paddingTop="8dp">
+
+    <ImageView
+        android:id="@+id/statusImg"
+        android:layout_width="25dp"
+        android:layout_height="25dp"
+        android:src="@drawable/pull_up" />
+
+    <TextView
+        android:id="@+id/statusTV"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dp"
+        android:layout_marginTop="4dp"
+        android:layout_toRightOf="@+id/statusImg"
+        android:gravity="center"
+        android:text="@string/pull_up_to_load"
+        android:textSize="16sp" />
+
+
+</LinearLayout>

+ 34 - 0
app_third/recyclerlibrary/src/main/res/layout/refresh_header.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingBottom="8dp"
+    android:paddingTop="8dp">
+
+    <RelativeLayout
+        android:id="@+id/statusRL"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true">
+
+        <ImageView
+            android:id="@+id/statusImg"
+            android:layout_width="25dp"
+            android:layout_height="25dp"
+            android:src="@drawable/pull_down" />
+
+        <TextView
+            android:id="@+id/statusTV"
+            android:layout_marginLeft="5dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="4dp"
+            android:layout_toRightOf="@+id/statusImg"
+            android:gravity="center"
+            android:text="@string/pull_down_to_refresh"
+            android:textSize="16sp" />
+
+    </RelativeLayout>
+
+</RelativeLayout>

+ 36 - 0
app_third/recyclerlibrary/src/main/res/layout/refresh_smart_footer.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/refresh_background"
+    android:paddingBottom="@dimen/refresh_padding_bottom"
+    android:paddingTop="@dimen/refresh_padding_top">
+
+
+    <TextView
+        android:id="@+id/statusTV"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
+        android:layout_marginLeft="5dp"
+        android:layout_marginTop="4dp"
+        android:gravity="center"
+        android:text="@string/pull_up_to_load"
+        android:textSize="16sp" />
+
+    <ImageView
+        android:id="@+id/statusImg"
+        android:layout_width="25dp"
+        android:layout_height="25dp"
+        android:layout_toLeftOf="@id/statusTV"
+        android:src="@drawable/pull_up" />
+
+    <com.module.recyclerlibrary.ui.refresh.smart.EatBeanLoadingView
+        android:id="@+id/srl_elv_pull_up"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_centerHorizontal="true"
+        android:layout_marginLeft="10dp"
+        android:layout_marginRight="10dp"
+        android:visibility="gone" />
+</RelativeLayout>

+ 38 - 0
app_third/recyclerlibrary/src/main/res/layout/refresh_smart_header.xml

@@ -0,0 +1,38 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/refresh_background"
+    android:paddingBottom="@dimen/refresh_padding_bottom"
+    android:paddingTop="@dimen/refresh_padding_top">
+
+
+    <TextView
+        android:id="@+id/statusTV"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:layout_marginLeft="5dp"
+        android:layout_marginTop="4dp"
+        android:gravity="center"
+        android:text="@string/pull_down_to_refresh"
+        android:textSize="16sp" />
+
+    <ImageView
+        android:id="@+id/statusImg"
+        android:layout_width="25dp"
+        android:layout_toLeftOf="@id/statusTV"
+        android:layout_height="25dp"
+        android:layout_alignParentBottom="true"
+        android:src="@drawable/pull_down" />
+
+    <com.module.recyclerlibrary.ui.refresh.smart.GhostLoadingView
+        android:id="@+id/srl_glv_pull_down"
+        android:layout_width="100dp"
+        android:layout_height="50dp"
+        android:layout_marginLeft="10dp"
+        android:layout_marginRight="10dp"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:visibility="gone" />
+</RelativeLayout>

+ 10 - 0
app_third/recyclerlibrary/src/main/res/values/attr.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <declare-styleable name="BaseRefreshLayout">
+        <attr name="enablePullUp" format="boolean" />
+        <attr name="enablePullDown" format="boolean" />
+        <attr name="pullBackground" format="color|reference" />
+        <attr name="fectiveScroll" format="dimension" />
+    </declare-styleable>
+
+</resources>

+ 4 - 0
app_third/recyclerlibrary/src/main/res/values/color.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="refresh_background">#FFFFFF</color>
+</resources>

+ 6 - 0
app_third/recyclerlibrary/src/main/res/values/dimens.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="refresh_padding_top">10dp</dimen>
+    <dimen name="refresh_padding_bottom">10dp</dimen>
+    <dimen name="refresh_item_height">60dp</dimen>
+</resources>

+ 10 - 0
app_third/recyclerlibrary/src/main/res/values/strings.xml

@@ -0,0 +1,10 @@
+<resources>
+    <string name="app_name">RecyclerLibrary</string>
+    <string name="pull_down_to_refresh">继续下拉刷新</string>
+    <string name="up_to_refresh">松开刷新</string>
+    <string name="pull_up_to_load">继续上拉加载</string>
+    <string name="up_to_load">松开加载</string>
+    <string name="refreshing">正在刷新</string>
+    <string name="loading">正在加载</string>
+
+</resources>

+ 4 - 2
settings.gradle

@@ -8,10 +8,10 @@ include ':common'
 include ':message'
 
 //业务模块
-include  ':appmessages'
+include ':appmessages'
 include ':applogin'
 include ':appcontact'
-include  ':appbooking'
+include ':appbooking'
 include ':appme'
 include ':appworks'
 include ':appmoments'
@@ -28,6 +28,7 @@ include ':materialdialogs'
 include ':MPAndroidChart'
 include ':pullToRefershLibraryMy'
 include ':android-pdf-viewer'
+include ':recyclerlibrary'
 
 //核心模块
 project(':network').projectDir = new File('app_core/network')
@@ -56,3 +57,4 @@ project(':MPAndroidChart').projectDir = new File('app_third/MPAndroidChart')
 project(':libfloatingactionbutton').projectDir = new File('app_third/libfloatingactionbutton')
 project(':library-swipemenu_lv').projectDir = new File('app_third/library-swipemenu_lv')
 project(':android-pdf-viewer').projectDir = new File('app_third/android-pdf-viewer')
+project(':recyclerlibrary').projectDir = new File('app_third/recyclerlibrary')

+ 2 - 2
version.gradle

@@ -11,8 +11,8 @@ ext {
             minSdkVersion    : 9,
             targetSdkVersion : 24,
             javaVersion      : JavaVersion.VERSION_1_8,
-            versionCode      : 114,
-            versionName      : '5.9.2',
+            versionCode      : 115,
+            versionName      : '5.9.3',
     ]
 
     depsVersion = [