Browse Source

Android版本6.3.1

Arison 7 years ago
parent
commit
7afeee23f3
63 changed files with 4545 additions and 531 deletions
  1. 1 1
      WeiChat/build.gradle
  2. 173 10
      WeiChat/proguard-rules.pro
  3. 36 44
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java
  4. 48 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java
  5. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java
  6. 52 118
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java
  7. 1 1
      WeiChat/src/main/res/layout/activity_splash.xml
  8. 385 14
      app_core/common/proguard-rules.pro
  9. 42 0
      app_core/common/src/main/java/com/common/ui/SoftInputLinearLayout.java
  10. 2 0
      app_core/common/src/main/java/com/core/app/AppConfig.java
  11. 0 3
      app_core/common/src/main/java/com/core/base/BaseToolBarActivity.java
  12. 18 0
      app_core/common/src/main/java/com/core/base/NotProguard.java
  13. 25 3
      app_core/common/src/main/java/com/core/net/ProgressDownloader.java
  14. 4 0
      app_core/common/src/main/java/com/core/utils/BaiduMapUtil.java
  15. 2 2
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  16. 2 2
      app_core/common/src/main/res/layout/base_bar_layout.xml
  17. 385 14
      app_core/imageload/proguard-rules.pro
  18. 386 15
      app_core/message/proguard-rules.pro
  19. 385 14
      app_core/network/proguard-rules.pro
  20. 172 10
      app_modular/appbooking/proguard-rules.pro
  21. 172 10
      app_modular/appcontact/proguard-rules.pro
  22. 2 2
      app_modular/appcontact/src/main/java/com/uas/appcontact/ui/activity/CompanyContactsActivity.java
  23. 172 10
      app_modular/applogin/proguard-rules.pro
  24. 172 10
      app_modular/appme/proguard-rules.pro
  25. 172 10
      app_modular/appmessages/proguard-rules.pro
  26. 2 1
      app_modular/appmessages/src/main/AndroidManifest.xml
  27. 3 3
      app_modular/appmessages/src/main/java/com/modular/appmessages/activity/ApprovalActivity.java
  28. 1 0
      app_modular/appmessages/src/main/java/com/modular/appmessages/fragment/ApprovalListFragment.java
  29. 15 17
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/ApprovaPresenter.java
  30. 50 27
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  31. 172 10
      app_modular/appmoments/proguard-rules.pro
  32. 385 14
      app_modular/appmusic/proguard-rules.pro
  33. 172 10
      app_modular/apptasks/proguard-rules.pro
  34. 172 10
      app_modular/apputils/proguard-rules.pro
  35. 8 5
      app_modular/apputils/src/main/AndroidManifest.xml
  36. 3 1
      app_modular/apputils/src/main/java/com/modular/apputils/adapter/ApprovalListAdapter.java
  37. 9 0
      app_modular/apputils/src/main/java/com/modular/apputils/model/ApprovalList.java
  38. 124 0
      app_modular/apputils/src/main/java/com/modular/apputils/service/CommonIntentService.java
  39. 200 56
      app_modular/apputils/src/main/java/com/modular/apputils/utils/SignUtils.java
  40. 3 0
      app_modular/apputils/src/main/java/com/modular/apputils/utils/SwitchUtil.java
  41. 1 1
      app_modular/apputils/src/main/java/com/modular/apputils/utils/WifiReceiverUtil.java
  42. 29 0
      app_modular/apputils/src/main/java/com/modular/apputils/widget/WrapContentLinearLayoutManager.java
  43. 12 1
      app_modular/apputils/src/main/res/layout/item_approval_list.xml
  44. 172 10
      app_modular/appworks/proguard-rules.pro
  45. 4 0
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/DeviceMatchActivity.java
  46. 38 42
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.java
  47. 0 2
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkReportAddActivity.java
  48. 44 13
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java
  49. 17 7
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java
  50. 53 0
      app_modular/appworks/src/main/java/com/uas/appworks/activity/B2BBusinessMainActivity.java
  51. 11 2
      app_modular/appworks/src/main/java/com/uas/appworks/model/DeviceMatch.java
  52. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_customer.png
  53. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_public.png
  54. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_purchase.png
  55. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_customer.png
  56. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_public.png
  57. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_purchase.png
  58. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_customer.png
  59. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_public.png
  60. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_purchase.png
  61. 10 1
      app_modular/appworks/src/main/res/layout/activity_b2b_business_main.xml
  62. 23 0
      app_modular/appworks/src/main/res/layout/item_device_match.xml
  63. 2 2
      version.gradle

+ 1 - 1
WeiChat/build.gradle

@@ -167,7 +167,7 @@ dependencies {
     androidTestCompile deps.leakcanaryNp
     debugCompile deps.leakcanary
     releaseCompile deps.leakcanaryNp
-  
+
     compile project(':common')
     compile project(':appmessages')
     compile project(':network')

+ 173 - 10
WeiChat/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,11 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+-keep class com.core.api.wxapi.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +377,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 36 - 44
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java

@@ -32,8 +32,6 @@ import com.core.dao.UserDao;
 import com.core.model.ConfigBean;
 import com.core.model.LoginRegisterResult;
 import com.core.model.User;
-import com.core.net.ProgressDownloader;
-import com.core.net.ProgressResponseBody;
 import com.core.net.volley.ObjectResult;
 import com.core.net.volley.Result;
 import com.core.net.volley.StringJsonObjectRequest;
@@ -46,6 +44,7 @@ import com.me.network.app.base.HttpCallback;
 import com.me.network.app.base.HttpParams;
 import com.me.network.app.http.HttpRequest;
 import com.me.network.app.http.Method;
+import com.modular.apputils.service.CommonIntentService;
 import com.modular.login.activity.LoginActivity;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.activity.ADActivity;
@@ -66,7 +65,7 @@ import pl.droidsonroids.gif.GifImageView;
  * @author Dean Tao
  * @version 1.0
  */
-public class SplashActivity extends BaseActivity implements ProgressResponseBody.ProgressListener {
+public class SplashActivity extends BaseActivity {
     private RelativeLayout mSelectLv;
     private GifImageView mGifImageView;
     private final String IS_FIRST = "IS_FIRST";
@@ -75,7 +74,6 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
     private boolean mConfigReady = false;// 配置获取成功
     private GifDrawable mGifDrawable;
     private boolean mAnimationCompleted = false;
-    private ProgressDownloader mDownloader;
     private String mSplshUrl;
     private long mStartTime;
 
@@ -92,7 +90,7 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
             public void run() {
                 jump();
             }
-        }, 2500);
+        }, 2000);
         mGifImageView = findViewById(R.id.splash_gif_view);
         showSplash();
         mSelectLv = (RelativeLayout) findViewById(R.id.select_lv);
@@ -168,19 +166,20 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
                                     if (!TextUtils.isEmpty(resUrl)) {
                                         String oldUrl = CommonUtil.getSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL);
                                         if (resUrl.equals(oldUrl)) {
-                                            return;
+                                            List<String> pictures = FileUtils.getPictures(Constants.SPLASH_FILE_PATH);
+                                            if (pictures != null && pictures.size() > 0) {
+                                                return;
+                                            } else {
+                                                downloadSplash(resUrl);
+                                            }
                                         } else {
-                                            initSplashDir();
-                                            mSplshUrl = resUrl;
                                             downloadSplash(resUrl);
                                         }
                                     } else {
-                                        initSplashDir();
-                                        CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, "");
+                                        clearSplashDir();
                                     }
                                 } else {
-                                    initSplashDir();
-                                    CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, "");
+                                    clearSplashDir();
                                 }
                             }
                         } catch (Exception e) {
@@ -193,6 +192,17 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
                 });
     }
 
+    private void downloadSplash(String resUrl) {
+        initSplashDir();
+        mSplshUrl = resUrl;
+        CommonIntentService.downloadSplash(MyApplication.getInstance(), resUrl);
+    }
+
+    private void clearSplashDir() {
+        initSplashDir();
+        CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, "");
+    }
+
     private void initSplashDir() {
         File directory = new File(Constants.SPLASH_FILE_PATH);
         if (!directory.exists() && !directory.isDirectory()) {
@@ -202,21 +212,6 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
         }
     }
 
-    private void downloadSplash(String resUrl) {
-        int dotIndex = resUrl.lastIndexOf(".");
-        if (dotIndex >= 0) {
-            String resExtension = resUrl.substring(dotIndex);
-            File splashFile = new File(Constants.SPLASH_FILE_PATH, Constants.SPLASH_FILE_NAME + resExtension);
-            try {
-                splashFile.createNewFile();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            mDownloader = new ProgressDownloader(resUrl, splashFile, SplashActivity.this);
-            mDownloader.download(0L);
-        }
-    }
-
     @Override
     protected void onResume() {
         super.onResume();
@@ -302,13 +297,13 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
 
         long currentTime = System.currentTimeMillis();
         long duration = currentTime - mStartTime;
-        if (duration < 2500) {
+        if (duration < 2000) {
             new Handler().postDelayed(new Runnable() {
                 @Override
                 public void run() {
                     jump();
                 }
-            }, 2500 - duration);
+            }, 2000 - duration);
             return;
         }
 
@@ -409,7 +404,18 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
                     }
                     Log.d("gifdrawableim", "animation->" + mAnimationCompleted);
                     if (mAnimationCompleted) {
-                        trun2NextPage(1);
+                        long currentTime = System.currentTimeMillis();
+                        long duration = currentTime - mStartTime;
+                        if (duration < 2000) {
+                            new Handler().postDelayed(new Runnable() {
+                                @Override
+                                public void run() {
+                                    trun2NextPage(1);
+                                }
+                            }, 2000 - duration);
+                        } else {
+                            trun2NextPage(1);
+                        }
                     }
                 } else {// 登录失败
                     jump();
@@ -465,18 +471,4 @@ public class SplashActivity extends BaseActivity implements ProgressResponseBody
             mGifDrawable = null;
         }
     }
-
-    @Override
-    public void onPreExecute(long contentLength) {
-
-    }
-
-    @Override
-    public void update(long totalBytes, boolean done) {
-        if (done) {
-            if (!TextUtils.isEmpty(mSplshUrl)) {
-                CommonUtil.setSharedPreferences(mContext, Constants.CACHE.CACHE_SPLASH_URL, mSplshUrl);
-            }
-        }
-    }
 }

+ 48 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewCommActivity.java

@@ -1,5 +1,6 @@
 package com.xzjmyk.pm.activity.ui.erp.activity;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.app.Activity;
@@ -28,6 +29,7 @@ import com.alibaba.fastjson.JSON;
 import com.common.LogUtil;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+import com.common.system.PermissionUtil;
 import com.common.system.SystemUtil;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
@@ -47,6 +49,8 @@ import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.umeng.socialize.media.UMImage;
 import com.umeng.socialize.shareboard.SnsPlatform;
 import com.umeng.socialize.utils.ShareBoardlistener;
+import com.uuzuche.lib_zxing.activity.CaptureActivity;
+import com.uuzuche.lib_zxing.activity.CodeUtils;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.MainActivity;
 import com.xzjmyk.pm.activity.util.oa.CommonUtil;
@@ -65,6 +69,9 @@ import java.util.Map;
  */
 public class WebViewCommActivity extends BaseActivity implements View.OnClickListener {
     public static final String TIME = "WebViewCommActivity_time";
+    private final static int FILECHOOSER_RESULTCODE = 1;
+    private final static int FLAG_SCAN_REQUEST = 31;
+
     private com.tencent.smtt.sdk.WebView webView;
     private ProgressBar pb;
     private ImageView back;
@@ -78,7 +85,6 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
 
     private ValueCallback<Uri> mUploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
-    private final static int FILECHOOSER_RESULTCODE = 1;
 
     private ArrayList<SubMessage> mSubscriptionMessages;
     private String mSubsAct;
@@ -88,6 +94,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
     private TextView mPreTv;
     private TextView mNextTv;
     private List<Object> mReadSubs;
+    private long mScanIndex = -1;
 
     private Handler hander = new Handler() {
         @Override
@@ -199,6 +206,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
             }
         }
         webView.getSettings().setJavaScriptEnabled(true);
+        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
         webView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
         //  webView.getRefreshableView().getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); //设置 缓存模式
         webView.getSettings().setDomStorageEnabled(true);
@@ -208,7 +216,8 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         webView.getSettings().setSaveFormData(true);
 
         // 修改ua使得web端正确判断
-        webView.addJavascriptInterface(new JSWebView(), "JSWebView"); //在JSWebView类里实现javascript想调用的方法,并将其实例化传入webview, "JSWebView"这个字串告诉javascript调用哪个实例的方法
+        webView.addJavascriptInterface(new JSWebView(), "JSWebView");
+        //在JSWebView类里实现javascript想调用的方法,并将其实例化传入webview, "JSWebView"这个字串告诉javascript调用哪个实例的方法
 
         setThirdPartyCookiesEnabled(true);
 
@@ -225,7 +234,7 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
 //          url="http://192.168.253.132:9090/platform-b2c/?client=true";
         Log.d("webUrl", url);
         webView.loadUrl(url, headers);
-//        webView.getRefreshableView().loadUrl("file:///android_asset/submit.html");
+//        webView.loadUrl("file:///android_asset/jsWithNative.html");
         webView.setWebChromeClient(new ChromeClient());
         webView.setWebViewClient(new WebViewClient() {
             @Override
@@ -421,6 +430,23 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
                 mUploadMessage.onReceiveValue(result);
                 mUploadMessage = null;
             }
+        } else if (requestCode == FLAG_SCAN_REQUEST && resultCode == Activity.RESULT_OK && data != null) {
+            Bundle extras = data.getExtras();
+            int resultType = extras.getInt(CodeUtils.RESULT_TYPE);
+            if (resultType == CodeUtils.RESULT_SUCCESS) {
+                String scanResult = extras.getString(CodeUtils.RESULT_STRING);
+                scanResult = mScanIndex + "," + scanResult;
+                if (Build.VERSION.SDK_INT < 18) {
+                    webView.loadUrl("javascript:scanCompleted('" + scanResult + "')");
+                } else {
+                    webView.evaluateJavascript("javascript:scanCompleted('" + scanResult + "')", new ValueCallback<String>() {
+                        @Override
+                        public void onReceiveValue(String s) {
+
+                        }
+                    });
+                }
+            }
         }
     }
 
@@ -623,6 +649,25 @@ public class WebViewCommActivity extends BaseActivity implements View.OnClickLis
         public void closeWebWindow() {
             finish();
         }
+
+        @JavascriptInterface
+        public void openScan(long index) {
+            runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    String[] permissions = new String[]{Manifest.permission.CAMERA};
+                    if (PermissionUtil.lacksPermissions(ct, permissions)) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                            requestPermissions(permissions, PermissionUtil.DEFAULT_REQUEST);
+                        }
+                    } else {
+                        mScanIndex = index;
+                        Intent intent = new Intent(mContext, CaptureActivity.class);
+                        startActivityForResult(intent, FLAG_SCAN_REQUEST);
+                    }
+                }
+            });
+        }
     }
 
 }

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java

@@ -707,6 +707,7 @@ public class MeFragment extends EasyFragment implements View.OnClickListener, On
     public ItemPopListAdapter adapter;
 
     public void showPopDialog(final Activity ct, List<ItemsSelectType1> itemsSelectType1s) {
+        if(ct==null)return;
         View view = null;
         if (DialogUtils.isDialogShowing(ViewUtil.popupWindow)){
             ViewUtil.popupWindow.dismiss();

+ 52 - 118
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -15,13 +15,9 @@ import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
 import android.widget.ImageButton;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
-import android.widget.TextView;
 
 import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
@@ -39,7 +35,6 @@ import com.core.net.utils.NetUtils;
 import com.core.utils.ToastUtil;
 import com.core.utils.sortlist.BaseSortModel;
 import com.core.widget.DrawableCenterTextView;
-import com.core.widget.RedView;
 import com.modular.appmessages.activity.ProcessB2BActivity;
 import com.modular.appmessages.activity.ProcessMsgActivity;
 import com.modular.appmessages.activity.Subscription2Activity;
@@ -50,7 +45,10 @@ import com.modular.appmessages.presenter.MessagePresenter;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.widget.SignRefreshLayout;
 import com.modular.apputils.adapter.LinearItemDecoration;
+import com.modular.apputils.utils.PopupWindowHelper;
+import com.modular.apputils.widget.WrapContentLinearLayoutManager;
 import com.uas.appme.pedometer.view.UURanking;
+import com.uas.appworks.OA.erp.activity.ChangeMobileActivity;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.platform.task.TaskActivity;
 import com.xzjmyk.pm.activity.ui.platform.task.TaskB2BActivity;
@@ -193,7 +191,7 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
         message_net_set = findViewById(R.id.message_net_set);
         mSignRefreshLayout = findViewById(R.id.mSignRefreshLayout);
         mRecyclerView = findViewById(R.id.mRecyclerView);
-        mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
+        mRecyclerView.setLayoutManager(new WrapContentLinearLayoutManager(ct, LinearLayoutManager.VERTICAL, false));
         mRecyclerView.addItemDecoration(new LinearItemDecoration(ct));
         presenter = new MessagePresenter(mContext, this, unReaderListener);
         signView = mSignRefreshLayout.getSignView();
@@ -321,23 +319,26 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
                 break;
 
             case R.id.itemSignImage:
-                WorkModel work = null;
-                if (mSignRefreshLayout != null && mSignRefreshLayout.getTag() != null) {
-                    Object tag = mSignRefreshLayout.getTag();
-                    if (tag instanceof WorkModel) {
-                        work = (WorkModel) tag;
-                    }
-                }
-                if (NetUtils.isNetWorkConnected(ct)) {
-                    presenter.signWork(work);
-                } else {
-                    showToact(R.string.networks_out);
-                }
+                sign(true);
                 break;
         }
 
     }
 
+    private void sign(boolean needMac) {
+        WorkModel work = null;
+        if (mSignRefreshLayout != null && mSignRefreshLayout.getTag() != null) {
+            Object tag = mSignRefreshLayout.getTag();
+            if (tag instanceof WorkModel) {
+                work = (WorkModel) tag;
+            }
+        }
+        if (NetUtils.isNetWorkConnected(ct)) {
+            presenter.signWork(needMac, work);
+        } else {
+            showToact(R.string.networks_out);
+        }
+    }
 
     @Override
     public void showModel(List<BaseSortModel<Friend>> models) {
@@ -486,113 +487,46 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
 
     @Override
     public void updateSign(String message) {
-        ToastUtil.showToast(ct, message, getContentView());
+        if (message.equals(getString(R.string.show_frist_mac))) {
+            showDialog(1, message);
+        } else if (message.contains("不是考勤打卡常用设备,是否需要更换")) {
+            showDialog(2, getString(R.string.other_phone_error));
+        } else if (message.contains("设备正处于申请变更绑定阶段")) {
+            showToact(R.string.mac_changing);
+        } else if (message.contains("该设备已被他人绑定")) {
+            showToact(R.string.mac_other);
+        } else {
+            ToastUtil.showToast(ct, message, getContentView());
+        }
         setSignViewData(true);
     }
 
+    /**
+     * 显示提示框
+     *
+     * @param type    1.第一次绑定mac  2.mac错误,进入修改
+     * @param message
+     */
+    private void showDialog(final int type, final String message) {
+        PopupWindowHelper.showAlart(getActivity(), getString(R.string.app_name), message, new PopupWindowHelper.OnSelectListener() {
+            @Override
+            public void select(boolean selectOk) {
 
-    private class HeadAdapter extends BaseAdapter {
-        List<MessageHeader> models;
-
-        public void setModels(List<MessageHeader> models) {
-            this.models = models;
-            notifyDataSetChanged();
-        }
-
-        public HeadAdapter(List<MessageHeader> models) {
-            this.models = models;
-        }
-
-        public List<MessageHeader> getModels() {
-            return models;
-        }
-
-        public MessageHeader getItemModel(int position) {
-            if (ListUtils.getSize(models) > position) {
-                return models.get(position);
-            } else {
-                return null;
-            }
-        }
-
-
-        public void updateModel(List<MessageHeader> models) {
-            this.models = models;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getCount() {
-            return ListUtils.getSize(models);
-        }
-
-        @Override
-        public Object getItem(int position) {
-            return models.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            ViewHodler hodler = null;
-            if (convertView == null) {
-                hodler = new ViewHodler();
-                convertView = LayoutInflater.from(ct).inflate(R.layout.item_message_header, null);
-                hodler.headerImg = (ImageView) convertView.findViewById(R.id.headerImg);
-                hodler.headerNumTv = (TextView) convertView.findViewById(R.id.headerNumTv);
-                hodler.headerRv = (RedView) convertView.findViewById(R.id.headerRv);
-                hodler.titleTv = (TextView) convertView.findViewById(R.id.titleTv);
-                hodler.headerSubTv = (TextView) convertView.findViewById(R.id.headerSubTv);
-                hodler.timeTv = (TextView) convertView.findViewById(R.id.timeTv);
-                convertView.setTag(hodler);
-            } else {
-                hodler = (ViewHodler) convertView.getTag();
-            }
-            try {
-                bindData(getItemModel(position), hodler);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            return convertView;
-        }
-
-        private class ViewHodler {
-            ImageView headerImg;
-            TextView headerNumTv;
-            RedView headerRv;
-            TextView titleTv;
-            TextView headerSubTv;
-            TextView timeTv;
-        }
+                if (selectOk) {
+                    switch (type) {
+                        case 1:
+                            sign(false);
+                            break;
+                        case 2:
+                            Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                            intent.putExtra("macAddress", presenter.getMac());
+                            startActivity(intent);
+                            break;
+                    }
 
-        private void bindData(MessageHeader model, ViewHodler hodler) throws Exception {
-            if (model != null) {
-                hodler.headerImg.setImageResource(model.getIcon());
-                if (model.getRedNum() > 0) {
-                    hodler.headerNumTv.setVisibility(View.VISIBLE);
-                    hodler.headerNumTv.setText(String.valueOf(model.getRedNum()));
-                } else {
-                    hodler.headerNumTv.setVisibility(View.GONE);
-                    hodler.headerNumTv.setText("");
-                }
-                hodler.titleTv.setText(model.getName());
-                hodler.headerSubTv.setText(model.getSubDoc());
-                if (model.isHideRed()) {
-                    hodler.headerRv.setVisibility(View.GONE);
-                    hodler.timeTv.setVisibility(View.VISIBLE);
-                    hodler.timeTv.setText(model.getTime());
-                } else {
-                    hodler.headerRv.setVisibility(View.VISIBLE);
-                    hodler.headerRv.setName(model.getRedMessage());
-                    hodler.timeTv.setVisibility(View.GONE);
                 }
             }
-        }
+        });
     }
 
-
 }

+ 1 - 1
WeiChat/src/main/res/layout/activity_splash.xml

@@ -8,7 +8,7 @@
         android:id="@+id/splash_gif_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:scaleType="centerCrop" />
+        android:scaleType="fitXY" />
 
     <RelativeLayout
         android:id="@+id/select_lv"

+ 385 - 14
app_core/common/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\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
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# 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 *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 42 - 0
app_core/common/src/main/java/com/common/ui/SoftInputLinearLayout.java

@@ -0,0 +1,42 @@
+package com.common.ui;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.view.WindowInsets;
+import android.widget.LinearLayout;
+
+public class SoftInputLinearLayout extends LinearLayout {
+    public SoftInputLinearLayout(Context context) {
+        super(context);
+    }
+
+    public SoftInputLinearLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+
+    public SoftInputLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    @Override
+    protected boolean fitSystemWindows(Rect insets) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
+            insets.left = 0;
+            insets.top = 0;
+            insets.right = 0;
+        }
+        return super.fitSystemWindows(insets);
+    }
+
+    @Override
+    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
+            return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0, insets.getSystemWindowInsetBottom()));
+        } else {
+            return insets;
+        }
+    }
+}

+ 2 - 0
app_core/common/src/main/java/com/core/app/AppConfig.java

@@ -6,8 +6,10 @@ import android.content.SharedPreferences.Editor;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.core.base.NotProguard;
 import com.core.model.ConfigBean;
 
+@NotProguard
 public class AppConfig {
     public static final boolean COMPANY = true;//不可以乱动,调试接口
     public static final boolean IS_MISSION = true;//是否自动外勤

+ 0 - 3
app_core/common/src/main/java/com/core/base/BaseToolBarActivity.java

@@ -18,7 +18,6 @@ import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.TextView;
 
-import com.common.LogUtil;
 import com.core.app.R;
 import com.core.utils.CommonUtil;
 import com.core.utils.StatusBarUtil;
@@ -93,9 +92,7 @@ public class BaseToolBarActivity extends AppCompatActivity {
     }
 
     public void initCommonToolbar() {
-        LogUtil.i("gong", "initCommonToolbar");
         if (commonToolBar != null) {
-            LogUtil.i("gong", "commonToolBar != null");
             StatusBarUtil.immersive(this, 0x00000000, 0.0f);
             setSupportActionBar(commonToolBar);
             getSupportActionBar().setDisplayShowTitleEnabled(false);

+ 18 - 0
app_core/common/src/main/java/com/core/base/NotProguard.java

@@ -0,0 +1,18 @@
+package com.core.base;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author RaoMeng
+ * @describe 不被混淆的注解
+ * @date 2018/6/5 9:40
+ */
+
+@Retention(RetentionPolicy.CLASS)
+@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
+
+public @interface NotProguard {
+}

+ 25 - 3
app_core/common/src/main/java/com/core/net/ProgressDownloader.java

@@ -81,6 +81,22 @@ public class ProgressDownloader {
         });
     }
 
+    public void download(final long startsPoint, final DownloadCallBack downloadCallBack) {
+        call = newCall(startsPoint);
+        call.enqueue(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+                downloadCallBack.onFailure(call, e);
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                downloadCallBack.onResponse(call, response);
+                save(response, startsPoint);
+            }
+        });
+    }
+
     public void pause() {
         if (call != null) {
             call.cancel();
@@ -88,9 +104,9 @@ public class ProgressDownloader {
     }
 
     protected void save(Response response, long startsPoint) {
-      String fileName=  response.headers().get("Content-Disposition");
-        LogUtil.i("fileName="+fileName);
-        LogUtil.i("response.headers()="+ JSON.toJSONString(response.headers()));
+        String fileName = response.headers().get("Content-Disposition");
+        LogUtil.i("fileName=" + fileName);
+        LogUtil.i("response.headers()=" + JSON.toJSONString(response.headers()));
         ResponseBody body = response.body();
         InputStream in = body.byteStream();
         FileChannel channelOut = null;
@@ -123,4 +139,10 @@ public class ProgressDownloader {
             }
         }
     }
+
+    public interface DownloadCallBack {
+        void onFailure(Call call, IOException e);
+
+        void onResponse(Call call, Response response);
+    }
 }

+ 4 - 0
app_core/common/src/main/java/com/core/utils/BaiduMapUtil.java

@@ -141,6 +141,10 @@ public class BaiduMapUtil {
         }
     }
 
+    /**
+     * 获取符合打卡的距离
+     * @return
+     */
     public float getDistance() {
         float dis = 0;
         try {

+ 2 - 2
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -106,9 +106,9 @@ public class CommonUtil {
         }
         String baseUrl = getSharedPreferences(ct, "erp_baseurl");
 //        if (BaseConfig.isDebug()){
-//            baseUrl="http://192.168.253.243:8080/ERP/";
+//            baseUrl="http://192.168.253.250:8080/ERP/";
 //        }
-//        baseUrl = "http://192.168.253.52:9000/ERP/";
+//        baseUrl = "http://192.168.253.41:8080/ERP/";
 
         return baseUrl;
     }

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

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
+<com.common.ui.SoftInputLinearLayout
         android:id="@+id/windowLl"
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
@@ -16,4 +16,4 @@
             android:layout_height="match_parent"
             android:layout_below="@+id/toolbarVs"
             android:orientation="horizontal" />
-</LinearLayout>
+</com.common.ui.SoftInputLinearLayout>

+ 385 - 14
app_core/imageload/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\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
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# 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 *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 386 - 15
app_core/message/proguard-rules.pro

@@ -1,25 +1,396 @@
 # Add project specific ProGuard rules here.
 # By default, the flags in this file are appended to flags specified
-# in E:\Android-Studio\sdk/tools/proguard/proguard-android.txt
+# in C:\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
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# 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 *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 385 - 14
app_core/network/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\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
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# 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 *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 172 - 10
app_modular/appbooking/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appcontact/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 2 - 2
app_modular/appcontact/src/main/java/com/uas/appcontact/ui/activity/CompanyContactsActivity.java

@@ -912,7 +912,7 @@ public class CompanyContactsActivity extends BaseActivity {
                     R.layout.item_pop_employee,
                     new String[]{"item_name", "item_sub"}, new int[]{R.id.name_tv, R.id.sub_tv});
             plist.setAdapter(adapter);
-          
+
             plist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                 @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@@ -941,7 +941,7 @@ public class CompanyContactsActivity extends BaseActivity {
                 }
             });
             popupWindow = new PopupWindow(view, windowManager.getDefaultDisplay().getWidth(), windowManager.getDefaultDisplay().getHeight() / 3);
-          
+
         }
         // 使其聚集
         popupWindow.setFocusable(true);

+ 172 - 10
app_modular/applogin/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appme/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/appmessages/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 2 - 1
app_modular/appmessages/src/main/AndroidManifest.xml

@@ -59,7 +59,8 @@
             android:theme="@style/MainBaseTheme" />
         <activity
             android:name=".activity.ApprovalActivity"
-            android:theme="@style/MainBaseTheme" />
+            android:theme="@style/MainBaseTheme"
+            android:windowSoftInputMode="adjustPan"/>
         <activity
             android:name=".activity.Subscription2Activity"
             android:label="@string/subscribe_title" />

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

@@ -12,7 +12,6 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
@@ -187,8 +186,8 @@ public class ApprovalActivity extends BaseActivity implements IApproval, Approva
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN |
-                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
+//        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN |
+//                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
         setContentView(R.layout.activity_approval);
         initView();
     }
@@ -558,6 +557,7 @@ public class ApprovalActivity extends BaseActivity implements IApproval, Approva
 
     @Override
     public void showToast(String message) {
+        LogUtil.i("gong","message="+message);
         super.showToast(message);
     }
 

+ 1 - 0
app_modular/appmessages/src/main/java/com/modular/appmessages/fragment/ApprovalListFragment.java

@@ -221,6 +221,7 @@ public class ApprovalListFragment extends ViewPagerLazyFragment implements OnSma
                     e.setLauncherName(JSONUtil.getText(object, "JP_LAUNCHERNAME"));
                     e.setName(JSONUtil.getText(object, "JP_NAME"));
                     e.setNodeId(JSONUtil.getText(object, "JP_NODEID"));
+                    e.setCodeValue(JSONUtil.getText(object, "JP_CODEVALUE"));
                     e.setDealTime(JSONUtil.getTime(object, "JP_LAUNCHTIME", "JN_DEALTIME"));
                     e.setMaster(JSONUtil.getText(object, "CURRENTMASTER"));
                     e.setImid(JSONUtil.getText(object, "EM_IMID"));

+ 15 - 17
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/ApprovaPresenter.java

@@ -193,7 +193,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
     /**
      * start 提交部分
      */
-        /*变更处理人 submiting*/
+    /*变更处理人 submiting*/
     public void updateAssignee(String emCode, String nodeLog) {
         if (StringUtil.isEmpty(nodeLog)) {
             iApproval.showToast(R.string.approval_opinion_error, R.color.load_submit);
@@ -1146,13 +1146,13 @@ public class ApprovaPresenter implements OnHttpResultListener {
                  */
                 for (int i = 0; i < approvals.size(); i++) {
                     Approval a = approvals.get(i);
-                    LogUtil.i("a.getIdKey()="+a.getIdKey());
+                    LogUtil.i("a.getIdKey()=" + a.getIdKey());
                     if (!a.getIdKey().startsWith("已审批")
                             && !a.getIdKey().startsWith("未通过")
                             && !a.getIdKey().startsWith("不同意")
                             && !a.getIdKey().startsWith("已结束")) {
                         hanNotApproval = true;
-                        if (a.getIdKey().startsWith("待审批")){
+                        if (a.getIdKey().startsWith("待审批")) {
                             a.setValues("");
                         }
                     } else if (a.getIdKey().startsWith("未通过") && i == 0) {
@@ -1292,14 +1292,14 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 if (a.getValuesKey().equals(record.nodeName)) {
                     hanEnd = true;
                 }
-                LogUtil.i("gong","name="+name);
-                LogUtil.i("gong","a.getValuesKey()="+a.getValuesKey());
+                LogUtil.i("gong", "name=" + name);
+                LogUtil.i("gong", "a.getValuesKey()=" + a.getValuesKey());
                 if (name.equals(a.getValuesKey())) {//为当前结点
-                    LogUtil.i("gong","为当前结点="+nodeDealName);
+                    LogUtil.i("gong", "为当前结点=" + nodeDealName);
                     if (!isLog) {
                         a.setDfType(nodeDealCode);
                         a.setCaption(nodeDealName);
-                        a.setIdKey( status);
+                        a.setIdKey(status);
                     } else {
                         if (launchTime > 0) {
                             a.setValues(DateFormatUtil.long2Str(launchTime, "MM-dd"));
@@ -1307,7 +1307,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         }
                         if (a.isDftypeEQ(nodeDealCode)) {
                             if (status.equals("不同意")) {
-                                a.setIdKey( "未通过");
+                                a.setIdKey("未通过");
                             } else if (status.equals("同意")) {
                                 a.setIdKey("已审批");
                             }
@@ -1551,14 +1551,18 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 }
             }
             Map<String, Object> formstore = putItem2Params(true, mainList);
-            if (formstore == null)
+            if (formstore == null) {
                 return false;
+            }
             formStore.putAll(formstore);
 
             for (List<Approval> details : detailList) {
                 Map<String, Object> param = putItem2Params(false, details);
-                if (param == null || param.isEmpty() || param.keySet().size() <= 1)
+                if (param == null || param.isEmpty() || param.keySet().size() <= 1) {
+//                    iApproval.showToast("明细行邮必填字段未填写");
+//                    return false;
                     continue;
+                }
                 params.add(param);
             }
         }
@@ -1575,12 +1579,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         iApproval.showToast(message);
                     }
                     return null;
-                } else if (StringUtil.isEmpty(approval.getValues())) {
-                    String message = StringUtil.getMessage(R.string.must_input_key) + " " + approval.getCaption() + " " + StringUtil.getMessage(R.string.limit_unno_zijie);
-                    if (showTocat) {
-                        iApproval.showToast(message);
-                    }
-                    return null;
                 } else {
                     if (approval.getValues().equals(Approval.VALUES_UNKNOWN)) {
                         formstore.put(approval.getValuesKey(), "1");//添加特殊字符判断
@@ -1617,7 +1615,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         approvals.addAll(enclosureList);
         approvals.addAll(pointsList);
         approvals.addAll(nodeList);
-        LogUtil.i("gong","setData2ListThread="+approvals.size());
+        LogUtil.i("gong", "setData2ListThread=" + approvals.size());
 
         OAHttpHelper.getInstance().post(new Runnable() {
             @Override

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

@@ -60,6 +60,7 @@ import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.util.ApprovalUtil;
 import com.modular.apputils.utils.SignUtils;
 import com.modular.apputils.utils.SwitchUtil;
+import com.modular.apputils.utils.VoiceUtils;
 import com.modular.booking.activity.services.BServiceListActivity;
 import com.modular.booking.model.SBMenuModel;
 import com.uas.appworks.OA.platform.activity.BusinessTravelActivity;
@@ -136,12 +137,17 @@ public class MessagePresenter implements OnHttpResultListener {
             LocalBroadcastManager.getInstance(ct).registerReceiver(dataChangeReceiver, dateFilter);
         }
         initHeaderModels();
+        if (mSignUtils == null) {
+            mSignUtils = new SignUtils(mSignListener);
+        }
     }
 
+
     public void loadData() {
         String role = CommonUtil.getUserRole();
         isB2b = false;
         if (role.equals("2")) {//Erp用户
+
             SUB_READ_TIME = CommonUtil.getMaster() + "SUB_READ_TIME";//订阅好点击阅读时间
             subReadTime = PreferenceUtils.getString(SUB_READ_TIME);
             loadRealTime();//获取实时看板数据
@@ -1057,20 +1063,37 @@ public class MessagePresenter implements OnHttpResultListener {
 
     private SignUtils mSignUtils;
 
-    public void signWork(WorkModel work) {
+    public void signWork(boolean needMac,WorkModel work) {
         if (mSignUtils == null) {
-            mSignUtils = new SignUtils(new SignUtils.SignListener() {
-                @Override
-                public void sign(boolean signOk, String message) {
-                    iMessageView.updateSign(message);
-                }
-            });
+            mSignUtils = new SignUtils(mSignListener);
         }
         if (work == null) {
             work = getCurrentWork();
         }
         iMessageView.showProgress();
-        mSignUtils.sign(isB2b, work);
+        if (needMac){
+            mSignUtils.sign(isB2b, work);
+        }else{
+            mSignUtils.signFristMac(isB2b, work);
+
+        }
+    }
+    private SignUtils.SignListener mSignListener=new SignUtils.SignListener() {
+        @Override
+        public void sign(boolean signOk, String message) {
+            if (signOk){
+                VoiceUtils.signVoice(R.raw.voice_sign);
+            }
+            iMessageView.updateSign(message);
+        }
+    };
+
+    public String getMac(){
+        if (mSignUtils!=null){
+            return mSignUtils.getMac();
+        }else{
+            return SystemUtil.getMac(ct);
+        }
     }
 
     public interface UnReaderListener {
@@ -1093,8 +1116,8 @@ public class MessagePresenter implements OnHttpResultListener {
 
         if (PreferenceUtils.getInt("UUSTEP", -1) == 1) {
             //显示UU运动
-            MessageNew h=new MessageNew();
-            MessageHeader  model = new MessageHeader(StringUtil.getMessage(R.string.set_sport));
+            MessageNew h = new MessageNew();
+            MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.set_sport));
             model.setIcon(R.drawable.uu_run);
             model.setSubDoc("");
             model.setRedKey(Constants.MESSAGE_RUN);
@@ -1105,8 +1128,8 @@ public class MessagePresenter implements OnHttpResultListener {
         }
 
         if (SwitchUtil.showShebeiguanli()) {
-            MessageNew h=new MessageNew();
-            MessageHeader    model = new MessageHeader("设备管理");
+            MessageNew h = new MessageNew();
+            MessageHeader model = new MessageHeader("设备管理");
             model.setIcon(R.drawable.uu_run);
             model.setSubDoc("");
             model.setRedKey(Constants.MESSAGE_RUN);
@@ -1118,10 +1141,10 @@ public class MessagePresenter implements OnHttpResultListener {
         iMessageView.updateHeader(models);
     }
 
-    private  List<MessageNew> getErpHeader() {
+    private List<MessageNew> getErpHeader() {
         List<MessageNew> models = new ArrayList<>();
 
-        MessageNew h=new MessageNew();
+        MessageNew h = new MessageNew();
         MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.msg_approval));
         model.setIcon(R.drawable.home_image_01_u);
         model.setSubDoc("");
@@ -1131,7 +1154,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.msg_work));
         model.setIcon(R.drawable.daibangongzuo);
         model.setSubDoc("");
@@ -1141,7 +1164,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.msg_subscribe));
         model.setIcon(R.drawable.tingyue);
         model.setSubDoc("");
@@ -1152,7 +1175,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
         model.setIcon(R.drawable.icon_yuyue3);
         model.setSubDoc("");
@@ -1164,9 +1187,9 @@ public class MessagePresenter implements OnHttpResultListener {
         return models;
     }
 
-    private  List<MessageNew> getB2bHeader() {
+    private List<MessageNew> getB2bHeader() {
         List<MessageNew> models = new ArrayList<>();
-        MessageNew h=new MessageNew();
+        MessageNew h = new MessageNew();
         MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.msg_approval));
         model.setIcon(R.drawable.home_image_01_u);
         model.setSubDoc("");
@@ -1176,7 +1199,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.msg_work));
         model.setIcon(R.drawable.daibangongzuo);
         model.setSubDoc("");
@@ -1186,7 +1209,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
         model.setIcon(R.drawable.icon_yuyue3);
         model.setSubDoc("");
@@ -1200,7 +1223,7 @@ public class MessagePresenter implements OnHttpResultListener {
 
     private List<MessageNew> getPersonalHeader() {
         List<MessageNew> models = new ArrayList<>();
-        MessageNew header=new MessageNew();
+        MessageNew header = new MessageNew();
         MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
         model.setIcon(R.drawable.icon_yuyue3);
         model.setSubDoc("");
@@ -1210,7 +1233,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("餐饮");
         model.setIcon(R.drawable.icon_food);
         model.setSubDoc("美味齐全");
@@ -1220,7 +1243,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("美容美发");
         model.setIcon(R.drawable.icon_hair);
         model.setSubDoc("时尚潮流");
@@ -1230,7 +1253,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("KTV");
         model.setIcon(R.drawable.icon_ktv);
         model.setSubDoc("音乐节");
@@ -1249,7 +1272,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("会所");
         model.setIcon(R.drawable.icon_club);
         model.setSubDoc("预约有优惠");
@@ -1259,7 +1282,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("医院挂号");
         model.setIcon(R.drawable.icon_hospital);
         model.setSubDoc("您的健康助手");

+ 172 - 10
app_modular/appmoments/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 385 - 14
app_modular/appmusic/proguard-rules.pro

@@ -3,23 +3,394 @@
 # in C:\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
+###############################
+#1.基本指令区
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 5
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
+-dontpreverify
+# 保留Annotation不混淆
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
+# 避免混淆泛型
+-keepattributes Signature
+# 抛出异常时保留代码行号
+-keepattributes SourceFile,LineNumberTable
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/cast,!field/*,!class/merging/*
+
+#2.默认保留区
+# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
+# 因为这些子类都有可能被外部调用
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+# 保留继承的
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+# 保留R下面的资源
+-keep class **.R$* {*;}
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+# 保留枚举类不被混淆
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 保留Parcelable序列化类不被混淆
+-keep class * implements android.os.Parcelable {
+    public static final android.os.Parcelable$Creator *;
+}
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+
+#3.webview
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+   public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用
+#这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
+-assumenosideeffects class android.util.Log {
+    public static *** v(...);
+    public static *** i(...);
+    public static *** d(...);
+    public static *** w(...);
+    public static *** e(...);
+}
+
+
+###############################
+#
+# 第三方jar包
+#
+###############################
+-keep class com.baidu.** {*;}
+-keep class mapsdkvi.com.** {*;}
+-dontwarn com.baidu.**
+
+-keep class com.uuzuche.lib_zxing.** {*;}
+-keep class com.andreabaccega.** {*;}
+-keep class com.github.clans.fab.** {*;}
+-keep class com.yalantis.phoenix.** {*;}
+-keep class com.baoyz.swipemenulistview.** {*;}
+-keep class com.viewpagerindicator.** {*;}
+-keep class com.afollestad.materialdialogs.** {*;}
+-keep class com.github.mikephil.charting.** {*;}
+-keep class com.module.recyclerlibrary.** {*;}
+-keep class com.handmark.pulltorefresh.library.** {*;}
+-keep class cc.cloudist.acplibrary.** {*;}
+
+-keep class android.arch.core.internal.** {*;}
+-keep class android.arch.lifecycle.** {*;}
+-keep class com.alibaba.fastjson.** {*;}
+-dontwarn com.alibaba.fastjson.**
+-keep class android.support.graphics.drawable.** {*;}
+-keep class com.facebook.stetho.** {*;}
+-keep class javax.annotation.** {*;}
+-keep class com.lidroid.xutils.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
+-keep class okio.** {*;}
+-dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
+-keep class org.apache.** {*;}
+-keep class org.junit.** {*;}
+-keep class junit.** {*;}
+-keep class org.hamcrest.** {*;}
+
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
 
-# Add any project specific keep options here:
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
 
-# 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 *;
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
+-keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
+-keep class com.google.gson.** {*;}
+-keep class com.google.gson.stream.** {*;}
+-keep class com.android.volley.** {*;}
+
+#butterknife
+-keep class butterknife.** { *; }
+-dontwarn butterknife.internal.**
+-keep class **$$ViewBinder { *; }
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
+-keep class cat.ereza.customactivityoncrash.** {*;}
+-keep class uk.co.senab.photoview.** {*;}
+-keep class com.flipboard.bottomsheet.** {*;}
+-keep class flipboard.bottomsheet.** {*;}
+
+#glide
+-keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
+-keep class com.chad.library.** {*;}
+-keep class com.tonicartos.widget.stickygridheaders.** {*;}
+-keep class com.orhanobut.logger.** {*;}
+-keep class com.readystatesoftware.systembartint.** {*;}
+-keep class com.scwang.smartrefresh.** {*;}
+-keep class com.squareup.** {*;}
+-keep class com.tencent.** {*;}
+-keep class com.youth.banner.** {*;}
+-keep class de.hdodenhof.circleimageview.** {*;}
+
+-keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
+-keep class me.gujun.android.taggroup.** {*;}
+-keep class me.zhanghai.android.materialprogressbar.** {*;}
+-keep class android.net.** {*;}
+-keep class com.android.internal.http.multipart.** {*;}
+-keep class se.emilsjolander.stickylistheaders.** {*;}
+-keep class com.alipay.** {*;}
+-dontwarn com.alipay.**
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
+}
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
 #}
 
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
+
+###############################
+#
+# 自己的代码
+# 引用的其他Module可以直接在app的这个混淆文件里配置
+#
+###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
+#实体类
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appcontact.model.** {*;}
+-keep class com.modular.login.model.** {*;}
+-keep class com.modular.booking.model.** {*;}
+-keep class com.uas.appme.settings.model.** {*;}
+-keep class com.modular.appmessages.model.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.uas.appworks.model.** {*;}
+-keep class com.xzjmyk.pm.activity.bean.** {*;}
+-keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
+#自定义控件
+-keep class com.core.widget.** {*;}
+-keep class com.modular.booking.widget.** {*;}
+-keep class com.uas.appcontact.ui.widget.stickylistheaders.** {*;}
+-keep class com.uas.appme.widget.** {*;}
+-keep class com.modular.appmessages.widget.** {*;}
+-keep class com.modular.apputils.widget.** {*;}
+-keep class com.uas.appworks.widget.** {*;}
+-keep class com.ipaulpro.afilechooser.** {*;}
+-keep class com.roamer.slidelistview.** {*;}
+-keep class com.xzjmyk.pm.activity.view.** {*;}
+-keep class com.xzjmyk.pm.activity.video.** {*;}
+-keep class com.modular.apputils.utils.** {*;}
+#与js互相调用的类
+-keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 172 - 10
app_modular/apptasks/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 172 - 10
app_modular/apputils/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 8 - 5
app_modular/apputils/src/main/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.modular.apputils">
+<manifest package="com.modular.apputils"
+          xmlns:android="http://schemas.android.com/apk/res/android">
 
     <application
         android:allowBackup="true"
@@ -42,7 +42,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name=".IntentUrlActivity" >
+        <activity android:name=".IntentUrlActivity">
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
 
@@ -54,8 +54,11 @@
                     android:scheme="app"></data>
             </intent-filter>
         </activity>
-    <activity android:name=".activity.PDFViewActivity"
-        android:label="PDF预览"/>
+        <activity
+            android:name=".activity.PDFViewActivity"
+            android:label="PDF预览" />
+
+        <service android:name=".service.CommonIntentService" />
     </application>
 
 </manifest>

+ 3 - 1
app_modular/apputils/src/main/java/com/modular/apputils/adapter/ApprovalListAdapter.java

@@ -73,6 +73,7 @@ public class ApprovalListAdapter extends RecyclerView.Adapter<ApprovalListAdapte
         viewHolder.statusTv.setText(DateFormatUtil.long2Str(model.getDealTime(), "MM-dd HH:mm") + "");
         viewHolder.subTitle.setTextColor(ct.getResources().getColor(model.getSubTitleColor()));
         viewHolder.subTitle.setText(model.getSubTitle());
+        viewHolder.orderNumTv.setText(model.getCodeValue());
         viewHolder.itemView.setTag(model);
         viewHolder.itemView.setOnClickListener(mOnClickListener);
         if (viewHolder.headImage.getVisibility() == View.VISIBLE) {
@@ -142,7 +143,7 @@ public class ApprovalListAdapter extends RecyclerView.Adapter<ApprovalListAdapte
 
     protected class ViewHolder extends RecyclerView.ViewHolder {
         CircleImageView headImage;
-        TextView statusTv, titleTv, subTitle;
+        TextView statusTv, titleTv, subTitle,orderNumTv;
 
         public ViewHolder(View itemView) {
             super(itemView);
@@ -150,6 +151,7 @@ public class ApprovalListAdapter extends RecyclerView.Adapter<ApprovalListAdapte
             statusTv = itemView.findViewById(R.id.statusTv);
             titleTv = itemView.findViewById(R.id.titleTv);
             subTitle = itemView.findViewById(R.id.subTitle);
+            orderNumTv = itemView.findViewById(R.id.orderNumTv);
             if (tabItem == 3) {
                 headImage.setVisibility(View.GONE);
             } else {

+ 9 - 0
app_modular/apputils/src/main/java/com/modular/apputils/model/ApprovalList.java

@@ -18,6 +18,15 @@ public class ApprovalList {
     private String operatedDescription;//变更处理人
     private int subTitleColor;
     private String subTitle;
+    private String  codeValue;
+
+    public String getCodeValue() {
+        return codeValue;
+    }
+
+    public void setCodeValue(String codeValue) {
+        this.codeValue = codeValue;
+    }
 
     public int getSubTitleColor() {
         return subTitleColor;

+ 124 - 0
app_modular/apputils/src/main/java/com/modular/apputils/service/CommonIntentService.java

@@ -0,0 +1,124 @@
+package com.modular.apputils.service;
+
+import android.app.IntentService;
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+
+import com.core.app.Constants;
+import com.core.net.ProgressDownloader;
+import com.core.net.ProgressResponseBody;
+import com.core.utils.CommonUtil;
+
+import java.io.File;
+import java.io.IOException;
+
+import okhttp3.Call;
+import okhttp3.Response;
+
+/**
+ * @author RaoMeng
+ * @describe
+ * @date 2018/6/7 9:37
+ */
+public class CommonIntentService extends IntentService {
+    private static final String SERVICE_NAME = "CommonIntentService";
+
+    /**
+     * action
+     */
+    private static final String ACTION_DOWNLOAD_SPLASH = "action_download_splash";
+
+    /**
+     * extras
+     */
+    private static final String EXTRA_STRING1 = "extra_string1";
+
+    private ProgressDownloader mDownloader;
+
+    public CommonIntentService() {
+        super(SERVICE_NAME);
+    }
+
+    public static void downloadSplash(Context context, String resUrl) {
+        Intent intent = new Intent(context, CommonIntentService.class);
+        intent.setAction(ACTION_DOWNLOAD_SPLASH);
+        intent.putExtra(EXTRA_STRING1, resUrl);
+        context.startService(intent);
+    }
+
+    @Override
+    protected void onHandleIntent(@Nullable Intent intent) {
+        if (intent != null) {
+            String action = intent.getAction();
+            if (TextUtils.isEmpty(action)) {
+                return;
+            }
+            switch (action) {
+                case ACTION_DOWNLOAD_SPLASH:
+                    String resUrl = intent.getStringExtra(EXTRA_STRING1);
+                    if (TextUtils.isEmpty(resUrl)) {
+                        initSplashDir();
+                        CommonUtil.setSharedPreferences(this, Constants.CACHE.CACHE_SPLASH_URL, "");
+                        return;
+                    }
+                    downloadSplashImp(resUrl);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+    private void downloadSplashImp(final String resUrl) {
+        int dotIndex = resUrl.lastIndexOf(".");
+        if (dotIndex >= 0) {
+            String resExtension = resUrl.substring(dotIndex);
+            File splashFile = new File(Constants.SPLASH_FILE_PATH, Constants.SPLASH_FILE_NAME + resExtension);
+            try {
+                splashFile.createNewFile();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            mDownloader = new ProgressDownloader(resUrl, splashFile, new ProgressResponseBody.ProgressListener() {
+                @Override
+                public void onPreExecute(long contentLength) {
+
+                }
+
+                @Override
+                public void update(long totalBytes, boolean done) {
+                    if (done) {
+                        if (!TextUtils.isEmpty(resUrl)) {
+                            CommonUtil.setSharedPreferences(CommonIntentService.this, Constants.CACHE.CACHE_SPLASH_URL, resUrl);
+                        }
+                    }
+                }
+            });
+            mDownloader.download(0L, new ProgressDownloader.DownloadCallBack() {
+                @Override
+                public void onFailure(Call call, IOException e) {
+                    initSplashDir();
+                    CommonUtil.setSharedPreferences(CommonIntentService.this, Constants.CACHE.CACHE_SPLASH_URL, "");
+                    downloadSplashImp(resUrl);
+                }
+
+                @Override
+                public void onResponse(Call call, Response response) {
+
+                }
+            });
+        }
+    }
+
+    private void initSplashDir() {
+        File directory = new File(Constants.SPLASH_FILE_PATH);
+        if (!directory.exists() && !directory.isDirectory()) {
+            boolean mkdirs = directory.mkdirs();
+        } else {
+            CommonUtil.delAllFile(Constants.SPLASH_FILE_PATH);
+        }
+    }
+
+}

+ 200 - 56
app_modular/apputils/src/main/java/com/modular/apputils/utils/SignUtils.java

@@ -2,6 +2,8 @@ package com.modular.apputils.utils;
 
 import android.content.Context;
 import android.os.Bundle;
+import android.support.annotation.StringRes;
+import android.text.TextUtils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -11,12 +13,15 @@ import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+import com.common.system.SystemUtil;
 import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.MyApplication;
 import com.core.dao.UserDao;
+import com.core.dao.WorkLocationDao;
 import com.core.dao.work.WorkModelDao;
 import com.core.model.User;
+import com.core.model.WorkLocationModel;
 import com.core.model.WorkModel;
 import com.core.net.http.http.OAHttpHelper;
 import com.core.net.http.http.OnHttpResultListener;
@@ -24,65 +29,162 @@ import com.core.net.http.http.Request;
 import com.core.net.location.BdLocationHelper;
 import com.core.utils.BaiduMapUtil;
 import com.core.utils.CommonInterface;
+import com.core.utils.CommonUtil;
 import com.modular.apputils.R;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static com.core.net.http.ViewUtil.ct;
 import static com.core.utils.CommonUtil.getSharedPreferences;
 
 
 /**
  * 只负责判断|签到
+ * 1.判断距离
+ * 2.判断mac
  * Created by Bitlike on 2018/5/3.
  */
 
 public class SignUtils implements OnHttpResultListener {
-    private final int LOAD_WORKLOG = 12;
-    private final int SIGNING = 11;
+    private final long INTERVAL = 10 * 1000;//间隔时间
+
+
+    private final int LOAD_MAC = 14;//获取网络mac地址
+    private final int MAC_VAL = 13;//判断mac地址
+    private final int LOAD_WORKLOG = 12;//获取打卡列表
+    private final int SIGNING = 11;//打卡
+
+
     private SignListener mSignListener;
 
-    private long lastTime = 0;
+    private long lastTime = 0;//最后一次打卡时间
 
     public SignUtils(SignListener mSignListener) {
         this.mSignListener = mSignListener;
+        getMac();
     }
 
     public interface SignListener {
         void sign(boolean signOk, String message);
     }
 
+    //确认第一次签到
+    private void signFristMac(Bundle bundle) {
+        boolean isB2b = false;
+        WorkModel model = null;
+        if (bundle != null) {
+            isB2b = bundle.getBoolean(KEY.IS_B2B, false);
+            model = bundle.getParcelable(KEY.WORK);
+        }
+        signFristMac(isB2b, model);
+    }
 
-    public void sign(final boolean isB2b, WorkModel model) {
-        if (System.currentTimeMillis() - lastTime < 10000) {
-            if (this.mSignListener !=null){
-                this.mSignListener.sign(false,"");
-            }
+    public void signFristMac(final boolean isB2b, WorkModel model) {
+        if (System.currentTimeMillis() - lastTime < INTERVAL) {
+            callBack(false, R.string.not_signin_agin);
             return;
         }
-        lastTime = System.currentTimeMillis();
-        MyApplication.getInstance().getBdLocationHelper().requestLocation();
-        final float dis = isSubmitAble();
-        if (dis > 0) {
-            final Bundle bundle = new Bundle();
-            bundle.putParcelable("data", model);
-            if (isB2b) {
-                signinWork(isB2b, bundle, "", dis);
+        if (!MyApplication.getInstance().isNetworkActive()) {
+            callBack(false, StringUtil.getMessage(R.string.networks_out));
+        } else {
+            //判断位置
+            MyApplication.getInstance().getBdLocationHelper().requestLocation();
+            List<WorkLocationModel> beanList = WorkLocationDao.getInstance().queryByEnCode();
+            if (ListUtils.isEmpty(beanList)) {
+                callBack(false, R.string.not_addr_message);
+                //没有打卡地址,TODO 获取班次接口
             } else {
-                CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+                BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
+                float minDis = -1;
+                for (WorkLocationModel bean : beanList) {
+                    String chche = BaiduMapUtil.getInstence().getDistance(bean.getLongitude(),
+                            bean.getLatitude(), helper.getLatitude(), helper.getLongitude());
+                    Float dis = Float.valueOf(chche);
+                    if (dis < bean.getValidrange() && (minDis < 0 || dis < minDis)) {
+                        minDis = dis;
+                    }
+                }//判断打卡距离结束
+                if (minDis != -1) {
+                    lastTime = System.currentTimeMillis();
+                    //时间和距离上符合打卡
+                    if (SwitchUtil.needMacForSign()) {
+                        validatorMac(isB2b, minDis, model);
+                    } else {
+                        Bundle bundle = new Bundle();
+                        bundle.putBoolean(KEY.IS_B2B, isB2b);
+                        bundle.putFloat(KEY.DISTANCE, minDis);
+                        bundle.putParcelable(KEY.WORK, model);
+                        toSignWork(bundle);
+                    }
+                } else {
+                    callBack(false, R.string.too_long);
+                }
+            }
+        }
+    }
+
+    //签到,判断是否第一次和当前mac地址时候存在问题
+    public void sign(final boolean isB2b, WorkModel model) {
+        loadMacInNet(isB2b, model);
+    }
+
+    /*判断mac地址是否符合*/
+    private void validatorMac(boolean isB2b, float minDis, WorkModel model) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("macAddress", macAddress);
+        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(KEY.IS_B2B, isB2b);
+        bundle.putFloat(KEY.DISTANCE, minDis);
+        bundle.putParcelable(KEY.WORK, model);
+        String url = "mobile/addMobileMac.action";
+        Request request = new Request.Bulider()
+                .setBundle(bundle)
+                .setMode(Request.Mode.POST)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(MAC_VAL)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    private String macAddress = null;
+
+    public String getMac() {
+        if (TextUtils.isEmpty(macAddress)) {
+            macAddress = SystemUtil.getMac(MyApplication.getInstance());
+            if (StringUtil.isEmpty(macAddress)) {
+                //当没有获取到MACAddress的时候,判断wifi状态,如果wifi为未启动
+                //mac地址不合法时候   提示开启wifi
+                WifiReceiverUtil wifiReceiver = new WifiReceiverUtil();
+                wifiReceiver.regReceiver(ct, new WifiReceiverUtil.OnWifiStatusChangeLinstener() {
                     @Override
-                    public void result(boolean isOk, int result, String message) {
-                        signinWork(isB2b, bundle, message, dis);
+                    public void callBack(boolean isOpen) {
+                        if (isOpen) {
+                            macAddress = SystemUtil.getMac(ct);
+                        }
                     }
                 });
             }
-        } else {
-            if (this.mSignListener != null) {
-                this.mSignListener.sign(false, StringUtil.getMessage(R.string.too_long));
-            }
         }
+        return macAddress;
+    }
 
+    private void toSignWork(final Bundle bundle) {
+        final boolean isB2b = bundle.getBoolean(KEY.IS_B2B, false);
+        final float minDis = bundle.getFloat(KEY.DISTANCE, 1);
+        if (isB2b) {
+            signinWork(isB2b, bundle, "", minDis);
+        } else {
+            CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+                @Override
+                public void result(boolean isOk, int result, String message) {
+                    signinWork(isB2b, bundle, message, minDis);
+                }
+            });
+        }
     }
 
     //签到
@@ -98,19 +200,15 @@ public class SignUtils implements OnHttpResultListener {
             if (!StringUtil.isEmpty(userId)) {
                 User user = UserDao.getInstance().getUserByUserId(userId);
                 phone = user.getTelephone();
-            } else
+            } else {
                 phone = getSharedPreferences(MyApplication.getInstance(), "user_phone");
+            }
         }
         form.put("cl_phone", phone);
         form.put("cl_emcode", getSharedPreferences(ct, "erp_username"));
-        String emname = getSharedPreferences(ct, "erp_emname");
-        if (StringUtil.isEmpty(emname)) {
-            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
-        }
-        form.put("cl_emname", emname);
+        form.put("cl_emname", CommonUtil.getName());
         form.put("cl_distance", dis);
-
-        boolean isp = isPlay(form);
+        boolean isp = isHasLocation(form);
         if (!isp) {
             return;//不符合打卡
         }
@@ -125,9 +223,6 @@ public class SignUtils implements OnHttpResultListener {
         param.put("emcode", getSharedPreferences(ct, "erp_username"));
         String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url :
                 "mobile/saveCardLog.action";
-        if (bunder != null) {
-            bunder.putBoolean("isB2b", isB2b);
-        }
         Request request = new Request.Bulider()
                 .setBundle(bunder)
                 .setMode(Request.Mode.POST)
@@ -140,7 +235,7 @@ public class SignUtils implements OnHttpResultListener {
     }
 
     /*判断是否符合打卡*/
-    private boolean isPlay(Map<String, Object> form) {
+    private boolean isHasLocation(Map<String, Object> form) {
         try {
             //判断是否符合打卡
             BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
@@ -159,24 +254,12 @@ public class SignUtils implements OnHttpResultListener {
         }
     }
 
-    private float isSubmitAble() {
-        //先判断网络
-        if (!MyApplication.getInstance().isNetworkActive()) {
-            if (this.mSignListener != null) {
-                this.mSignListener.sign(false, StringUtil.getMessage(R.string.networks_out));
-            }
-            return -1;
-        }
-        //判断位置
-        float dis = BaiduMapUtil.getInstence().getDistance();
-        return dis;
-    }
 
     //获取打卡记录
     private void loadLog(Bundle bunder) {
         boolean isB2b = false;
         if (bunder != null) {
-            isB2b = bunder.getBoolean("isB2b");
+            isB2b = bunder.getBoolean(KEY.IS_B2B);
         }
         String date = DateFormatUtil.long2Str(DateFormatUtil.YMD);
         //获取网络数据
@@ -207,6 +290,27 @@ public class SignUtils implements OnHttpResultListener {
         OAHttpHelper.getInstance().requestHttp(request, this);
     }
 
+    //判断mac地址是否已经上传
+    public void loadMacInNet(final boolean isB2b, WorkModel model) {
+        //获取网络数据
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(KEY.IS_B2B, isB2b);
+        bundle.putParcelable(KEY.WORK, model);
+        Map<String, Object> param = new HashMap<>();
+        param.put("macaddress", macAddress);
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        String url = "mobile/queryMobileMac.action";
+        Request request = new Request.Bulider()
+                .setUrl(url)
+                .setBundle(bundle)
+                .setWhat(LOAD_MAC)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+
+    }
+
     @Override
     public void result(int what, boolean isJSON, String message, Bundle bundle) {
         try {
@@ -219,6 +323,31 @@ public class SignUtils implements OnHttpResultListener {
                         saveSignin2DB(bundle, JSON.parseObject(message).getJSONArray("listdata"));
                     }
                     break;
+
+                case MAC_VAL:
+                    if (isJSON && JSONUtil.getBoolean(message, "success")) {
+                        toSignWork(bundle);
+                    } else {
+                        CommonUtil.saveAutoLogtoLocal(StringUtil.getMessage(R.string.auto_sign_failed), message);
+                    }
+                    break;
+                case LOAD_MAC://判断是否是第一次请求数据
+                    if (isJSON) {
+                        JSONObject object = JSON.parseObject(message);
+                        if (object.containsKey("success") && object.getBoolean("success")) {
+                            //返回成功
+                            JSONArray array = object.getJSONArray("macaddress");
+                            if ("0".equals(array.getJSONObject(0).getString("MACADDRESS"))) {
+                                callBack(false, R.string.show_frist_mac);
+                            } else {
+                                signFristMac(bundle);
+
+                            }
+                        }
+                    } else {
+                        callBack(false, "签到失败+" + message);
+                    }
+                    break;
             }
         } catch (Exception e) {
             if (this.mSignListener != null && e != null) {
@@ -229,16 +358,15 @@ public class SignUtils implements OnHttpResultListener {
 
     @Override
     public void error(int what, String message, Bundle bundle) {
-        if (this.mSignListener != null && message != null) {
-            this.mSignListener.sign(false, message);
-        }
+        lastTime = 0;
+        callBack(false, message);
     }
 
     //保存到数据库
     private void saveSignin2DB(Bundle bundle, JSONArray array) throws Exception {
         WorkModel model = null;
-        if (bundle != null && bundle.getParcelable("data") != null) {
-            model = bundle.getParcelable("data");
+        if (bundle != null && bundle.getParcelable(KEY.WORK) != null) {
+            model = bundle.getParcelable(KEY.WORK);
         }
         if (model == null) {
             List<WorkModel> models = WorkModelDao.getInstance().query(false);
@@ -266,10 +394,26 @@ public class SignUtils implements OnHttpResultListener {
             model.setOffSignin(time);
             WorkModelDao.getInstance().update(model);
         }
+        callBack(true, "打卡成功");
+    }
 
-        VoiceUtils.signVoice(R.raw.voice_sign);
-        if (this.mSignListener != null) {
-            this.mSignListener.sign(true, "打卡成功");
+    private void callBack(boolean signOk, @StringRes int messageId) {
+        if (MyApplication.getInstance() != null) {
+            callBack(signOk, StringUtil.getMessage(messageId));
         }
+
+    }
+
+    private void callBack(boolean signOk, String message) {
+        if (mSignListener != null) {
+            mSignListener.sign(signOk, message);
+        }
+    }
+
+
+    private interface KEY {
+        String IS_B2B = "isB2b";
+        String WORK = "work";
+        String DISTANCE = "distance";
     }
 }

+ 3 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/SwitchUtil.java

@@ -15,5 +15,8 @@ public class SwitchUtil {
         return false;
     }
 
+    public static boolean needMacForSign(){
+        return false;
+    }
 
 }

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/WifiReceiverUtil.java → app_modular/apputils/src/main/java/com/modular/apputils/utils/WifiReceiverUtil.java

@@ -1,4 +1,4 @@
-package com.uas.appworks.OA.erp.utils;
+package com.modular.apputils.utils;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;

+ 29 - 0
app_modular/apputils/src/main/java/com/modular/apputils/widget/WrapContentLinearLayoutManager.java

@@ -0,0 +1,29 @@
+package com.modular.apputils.widget;
+
+import android.content.Context;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+
+public class WrapContentLinearLayoutManager extends LinearLayoutManager {
+    public WrapContentLinearLayoutManager(Context context) {
+        super(context);
+    }
+
+    public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
+        super(context, orientation, reverseLayout);
+    }
+
+    public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
+        try {
+            super.onLayoutChildren(recycler, state);
+        } catch (IndexOutOfBoundsException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 12 - 1
app_modular/apputils/src/main/res/layout/item_approval_list.xml

@@ -52,10 +52,21 @@
                 android:textSize="15sp" />
 
             <TextView
-                android:id="@+id/subTitle"
+                android:id="@+id/orderNumTv"
+                android:layout_below="@id/titleTv"
                 android:layout_width="wrap_content"
+                android:textSize="12sp"
+                android:layout_alignParentRight="true"
+                android:textColor="@color/done_approval"
+                android:layout_height="wrap_content" />
+            <TextView
+                android:id="@+id/subTitle"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/titleTv"
+                android:layout_toLeftOf="@id/orderNumTv"
+                android:lines="1"
+                android:ellipsize="end"
                 android:layout_marginTop="4dp"
                 android:layout_toRightOf="@id/headImage"
                 android:textColor="@color/done_approval"

+ 172 - 10
app_modular/appworks/proguard-rules.pro

@@ -24,7 +24,10 @@
 # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
 -dontpreverify
 # 保留Annotation不混淆
--keepattributes *Annotation*,InnerClasses
+-keepattributes *Annotation*
+-keepattributes InnerClasses
+# 避免混淆反射
+-keepattributes EnclosingMethod
 # 避免混淆泛型
 -keepattributes Signature
 # 抛出异常时保留代码行号
@@ -39,6 +42,7 @@
 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
 -keep public class * extends android.content.BroadcastReceiver
 -keep public class * extends android.content.ContentProvider
 -keep public class * extends android.app.backup.BackupAgentHelper
@@ -130,7 +134,7 @@
 #
 ###############################
 -keep class com.baidu.** {*;}
--keep class vi.com.** {*;}
+-keep class mapsdkvi.com.** {*;}
 -dontwarn com.baidu.**
 
 -keep class com.uuzuche.lib_zxing.** {*;}
@@ -153,28 +157,118 @@
 -keep class com.facebook.stetho.** {*;}
 -keep class javax.annotation.** {*;}
 -keep class com.lidroid.xutils.** {*;}
--keep class okhttp3.** {*;}
+#okhttp3
+-keep class okhttp3.** { *; }
+-keep interface okhttp3.** { *; }
+-dontwarn okhttp3.**
 -keep class okio.** {*;}
 -dontwarn okio.**
+#retrofit
+-keep class com.squareup.okhttp.** { *; }
+-keep class retrofit.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-dontwarn okio.**
+-dontwarn retrofit.**
+-dontwarn rx.**
+#retrofit2
+-dontwarn retrofit2.**
+-keep class retrofit2.** { *; }
+-keepclasseswithmembers class * {
+    @retrofit2.http.* <methods>;
+}
+
+-keepclasseswithmembers class * {
+    @retrofit.http.* <methods>;
+}
+
 -keep class org.apache.** {*;}
 -keep class org.junit.** {*;}
 -keep class junit.** {*;}
 -keep class org.hamcrest.** {*;}
 
+#design
+-dontwarn android.support.design.**
+-keep class android.support.design.** { *; }
+-keep interface android.support.design.** { *; }
+-keep public class android.support.design.R$* { *; }
+
+#support-v7-appcompat
+-keep public class android.support.v7.widget.** { *; }
+-keep public class android.support.v7.internal.widget.** { *; }
+-keep public class android.support.v7.internal.view.menu.** { *; }
+-keep public class * extends android.support.v4.view.ActionProvider {
+    public <init>(android.content.Context);
+}
+
+#cardview
+-keep class android.support.v7.widget.RoundRectDrawable { *; }
+
+#gson
 -keep class sun.misc.Unsafe {*;}
+-keep class com.google.gson.examples.android.model.** {*;}
 -keep class com.google.gson.** {*;}
 -keep class com.google.gson.stream.** {*;}
 -keep class com.android.volley.** {*;}
 
--keep class butterknife.** {*;}
+#butterknife
+-keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
-
+-keepclasseswithmembernames class * {
+   @butterknife.* <fields>;
+}
+-keepclasseswithmembernames class * {
+   @butterknife.* <methods>;
+}
+-keep class com.nostra13.universalimageloader.** {*;}
 -keep class cat.ereza.customactivityoncrash.** {*;}
 -keep class uk.co.senab.photoview.** {*;}
 -keep class com.flipboard.bottomsheet.** {*;}
 -keep class flipboard.bottomsheet.** {*;}
+
+#glide
 -keep class com.bumptech.glide.** {*;}
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+#sharesdk
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn **.R$*
+-dontwarn com.tencent.**
+-keep class com.tencent.** {*;}
+
+#android-gif-drawable
+-keep class pl.droidsonroids.** {*;}
+-keep public class pl.droidsonroids.gif.GifIOException{<init>(int);}
+-keep class pl.droidsonroids.gif.GifInfoHandle{<init>(long,int,int,int);}
+#retrolambda
+-dontwarn java.lang.invoke.*
+#rxjava
+-keep class rx.** {*;}
+-keep class rx.schedulers.Schedulers {
+    public static <methods>;
+}
+-keep class rx.schedulers.ImmediateScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.TestScheduler {
+    public <methods>;
+}
+-keep class rx.schedulers.Schedulers {
+    public static ** test();
+}
+
+-keep class net.sourceforge.pinyin4j.**{*;}
+-keep class org.xbill.** {*;}
+-dontwarn org.xbill.**
 -keep class com.chad.library.** {*;}
 -keep class com.tonicartos.widget.stickygridheaders.** {*;}
 -keep class com.orhanobut.logger.** {*;}
@@ -182,22 +276,67 @@
 -keep class com.scwang.smartrefresh.** {*;}
 -keep class com.squareup.** {*;}
 -keep class com.tencent.** {*;}
--keep class com.umeng.analytics.** {*;}
 -keep class com.youth.banner.** {*;}
 -keep class de.hdodenhof.circleimageview.** {*;}
--keep class rx.** {*;}
+
 -keep class org.joda.time.** {*;}
+-dontwarn org.joda.time.**
 -keep class me.gujun.android.taggroup.** {*;}
 -keep class me.zhanghai.android.materialprogressbar.** {*;}
 -keep class android.net.** {*;}
 -keep class com.android.internal.http.multipart.** {*;}
--keep class pl.droidsonroids.gif.** {*;}
 -keep class se.emilsjolander.stickylistheaders.** {*;}
 -keep class com.alipay.** {*;}
 -dontwarn com.alipay.**
--keep class com.tencent.mm.sdk.** {
-   *;
+-keep class com.tencent.mm.sdk.** {*;}
+-keep class com.loopj.android.http.**{*;}
+-keep class com.novell.sasl.client.**{*;}
+-keep class de.measite.smack.**{*;}
+-keep class org.jivesoftware.**{*;}
+-keep class flexjson.**{*;}
+-keep class lecho.lib.hellocharts.**{*;}
+-keep class org.apache.http.entity.mime.**{*;}
+-keep class com.litesuits.orm.**{*;}
+-keep class com.iflytek.**{*;}
+-keep class com.nineoldandroids.**{*;}
+-keep class org.xbill.DNS.**{*;}
+
+#Ormlite
+-keep class com.j256.**
+-keepclassmembers class com.j256.** { *; }
+-keep enum com.j256.**
+-keepclassmembers enum com.j256.** { *; }
+-keep interface com.j256.**
+-keepclassmembers interface com.j256.** { *; }
+-keep class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
+-keepclassmembers class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper {
+  public <init>(android.content.Context);
+}
+-keep @com.j256.ormlite.table.DatabaseTable class * {
+    @com.j256.ormlite.field.DatabaseField <fields>;
+    @com.j256.ormlite.field.ForeignCollectionField <fields>;
+    # Add the ormlite field annotations that your model uses here
+#    <init>();
 }
+#-keepclassmembers class * {
+#    public <init>(android.content.Context);
+#}
+
+-keep class com.hp.hpl.sparta.**{*;}
+-keep class pinyindb.**{*;}
+-keep class demo.** {*;}
+-dontwarn demo.**
+#友盟
+-keep class com.umeng.analytics.** {*;}
+-keep class com.umeng.socialize.**{*;}
+-keep class com.umeng.qqsdk.**{*;}
+-keep class com.tencent.mm.sdk.**{*;}
+-keep class core.umeng.wxsdk.**{*;}
+-keep class com.umeng.customview.**{*;}
+-keep class com.zhy.tree.bean.**{*;}
+
+-keep class com.iflytek.sunflower.**{*;}
+-keep class MTT.**{*;}
 
 ###############################
 #
@@ -205,6 +344,8 @@
 # 引用的其他Module可以直接在app的这个混淆文件里配置
 #
 ###############################
+-keep class com.core.net.** {*;}
+-keep class com.core.dao.** {*;}
 #实体类
 -keep class com.modular.booking.model.** {*;}
 -keep class com.uas.appcontact.model.** {*;}
@@ -216,6 +357,10 @@
 -keep class com.uas.appworks.model.** {*;}
 -keep class com.xzjmyk.pm.activity.bean.** {*;}
 -keep class com.modular.apputils.model.** {*;}
+-keep class com.core.xmpp.model.** {*;}
+-keep class com.core.model.** {*;}
+-keep class com.core.app.** {*;}
+-keep class com.uas.appworks.OA.erp.model.** {*;}
 #自定义控件
 -keep class com.core.widget.** {*;}
 -keep class com.modular.booking.widget.** {*;}
@@ -231,4 +376,21 @@
 -keep class com.modular.apputils.utils.** {*;}
 #与js互相调用的类
 -keep class com.com.xzjmyk.pm.activity.ui.erp.activity.WebViewCommActivity.JSWebView
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.WebViewClient {
+    public void *(android.webkit.WebView, jav.lang.String);
+}
+
+# keep annotated by NotProguard
+# 被NotProguard注解过的类或方法或属性不被混淆
+#-keep @com.core.base.NotProguard class * {*;}
+#-keep class * {
+#    @com.core.base.NotProguard <fields>;
+#}
+#-keepclassmembers class * {
+#    @com.core.base.NotProguard <methods>;
+#}
 

+ 4 - 0
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/DeviceMatchActivity.java

@@ -176,6 +176,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
                 matche.setName(JSONUtil.getText(object, "DE_NAME"));
                 matche.setExistqty(JSONUtil.getText(object, "EXISTQTY"));
                 matche.setLackqty(JSONUtil.getText(object, "LACKQTY"));
+                matche.setNeedqty(JSONUtil.getText(object, "NEEDQTY"));
                 matches.add(matche);
             }
         }
@@ -219,6 +220,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
             holder.nameTv.setText(match.getName());
             holder.existqtyTv.setText(match.getExistqty());
             holder.lackqtyTv.setText(match.getLackqty());
+            holder.needqtyTv.setText(match.getNeedqty());
         }
 
         @Override
@@ -232,6 +234,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
             private TextView nameTv;
             private TextView existqtyTv;
             private TextView lackqtyTv;
+            private TextView needqtyTv;
 
             public ViewHolder(View itemView) {
                 super(itemView);
@@ -239,6 +242,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
                 nameTv = itemView.findViewById(R.id.nameTv);
                 existqtyTv = itemView.findViewById(R.id.existqtyTv);
                 lackqtyTv = itemView.findViewById(R.id.lackqtyTv);
+                needqtyTv = itemView.findViewById(R.id.needqtyTv);
             }
         }
     }

+ 38 - 42
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.java

@@ -35,10 +35,11 @@ import com.core.base.OABaseActivity;
 import com.core.model.WorkModel;
 import com.core.utils.time.wheel.OASigninPicker;
 import com.lidroid.xutils.ViewUtils;
+import com.modular.apputils.utils.PopupWindowHelper;
+import com.modular.apputils.utils.WifiReceiverUtil;
 import com.uas.appworks.OA.erp.activity.form.WorkLogsActivity;
 import com.uas.appworks.OA.erp.adapter.WorkAdapter;
 import com.uas.appworks.OA.erp.presenter.WorkPresenter;
-import com.uas.appworks.OA.erp.utils.WifiReceiverUtil;
 import com.uas.appworks.OA.erp.view.IWorkView;
 import com.uas.appworks.R;
 
@@ -137,21 +138,18 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 		line = findViewById(R.id.line);
 		empty_rl = (RelativeLayout) findViewById(R.id.empty_rl);
 		date_tv = (TextView) findViewById(R.id.date_tv);
-
 		selectTime = System.currentTimeMillis();
 		getMac();
 		presenter = new WorkPresenter(this, macAddress);
 		adapter = new WorkAdapter(ct);
 		listview.setLayoutManager(new LinearLayoutManager(ct));
 		listview.setAdapter(adapter);
-		presenter.start(true);
 		date_tv.setText(DateFormatUtil.long2Str(System.currentTimeMillis(), "yyyy年MM月dd日") + " " +
 				CalendarUtil.getWeek(System.currentTimeMillis()));
 		findViewById(R.id.signin_btn).setOnClickListener(this);
 		findViewById(R.id.unoffice_).setOnClickListener(this);
 		date_tv.setOnClickListener(this);
-
-
+		presenter.start(true);
 	}
 
 	@Override
@@ -197,44 +195,48 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 
 	@Override
 	public void showFristMac() {
-		MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.common_dialog_title).content(R.string.show_frist_mac)
-				.positiveText(R.string.common_sure).negativeText(R.string.common_cancel).autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
-					@Override
-					public void onPositive(MaterialDialog dialog) {
-						presenter.submitByFrist((ArrayList<WorkModel>) adapter.getModels(), macAddress);
-						dialog.dismiss();
-					}
-
-					@Override
-					public void onNegative(MaterialDialog dialog) {
-						super.onNegative(dialog);
-						dialog.dismiss();
-					}
-				}).build();
-		dialog.show();
+        showDialog(1,getString(R.string.show_frist_mac));
 	}
 
 	@Override
 	public void showErrorMac() {
-		MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.common_dialog_title).content(getString(R.string.other_phone_error))
-				.positiveText(R.string.common_sure).negativeText(R.string.common_cancel).autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
-					@Override
-					public void onPositive(MaterialDialog dialog) {
-						dialog.dismiss();
-						Intent intent = new Intent(ct, ChangeMobileActivity.class);
-						intent.putExtra("macAddress", macAddress);
-						startActivityForResult(intent, PHONE_CHANGE);
-					}
+        showDialog(2,getString(R.string.other_phone_error));
+	}
 
-					@Override
-					public void onNegative(MaterialDialog dialog) {
-						super.onNegative(dialog);
-						dialog.dismiss();
-					}
-				}).build();
-		dialog.show();
+	@Override
+	public void setErrorMac(String message) {
+		macError = message;
 	}
 
+    /**
+     * 显示提示框
+     *
+     * @param type    1.第一次绑定mac  2.mac错误,进入修改
+     * @param message
+     */
+    private void showDialog(final int type, final String message) {
+        PopupWindowHelper.showAlart(this, getString(R.string.app_name), message, new PopupWindowHelper.OnSelectListener() {
+            @Override
+            public void select(boolean selectOk) {
+
+                if (selectOk) {
+                    switch (type) {
+                        case 1:
+                            presenter.submitByFrist((ArrayList<WorkModel>) adapter.getModels(), macAddress);
+                            break;
+                        case 2:
+                            Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                            intent.putExtra("macAddress", macAddress);
+                            startActivityForResult(intent, PHONE_CHANGE);
+                            break;
+                    }
+
+                }
+            }
+        });
+    }
+
+
 	private MaterialDialog notLocationDialog = null;
 
 	@Override
@@ -258,10 +260,6 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 	public void setPois(List<PoiInfo> pois, LatLng latLng) {
 	}
 
-	@Override
-	public void setErrorMac(String message) {
-		macError = message;
-	}
 
 
 	@Override
@@ -274,10 +272,8 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 				presenter.submit((ArrayList<WorkModel>) adapter.getModels(), macAddress);
 			}
 		} else if (view.getId() == R.id.date_tv) {
-			//TODO UI修改
 //			isShowTocstAble = true;
 //			showDateDialog();
-
 		} else if (view.getId() == R.id.unoffice_) {
 			isShowTocstAble = true;
 			presenter.gotoLocationActivity(WorkActivity.this);

+ 0 - 2
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkReportAddActivity.java

@@ -31,7 +31,6 @@ import com.common.data.StringUtil;
 import com.core.app.Constants;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
-import com.core.base.view.AndroidBug5497Workaround;
 import com.core.model.SelectBean;
 import com.core.net.http.ViewUtil;
 import com.core.utils.CommonUtil;
@@ -302,7 +301,6 @@ public class WorkReportAddActivity extends BaseActivity implements View.OnClickL
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_work_report_add);
-        AndroidBug5497Workaround.assistActivity(this);
         Intent intent = getIntent();
         if (intent != null) {
             mReportType = intent.getIntExtra("report_type", Constants.WORK_REPORT_DAY);

+ 44 - 13
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java

@@ -36,6 +36,7 @@ import com.core.utils.TimeUtils;
 import com.core.utils.WorkHandlerUtil;
 import com.core.widget.view.Activity.SearchLocationActivity;
 import com.core.widget.view.model.SearchPoiParam;
+import com.modular.apputils.utils.SignUtils;
 import com.uas.appworks.OA.erp.view.IWorkView;
 import com.uas.appworks.R;
 
@@ -472,12 +473,14 @@ public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
         isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
         MyApplication.getInstance().getBdLocationHelper().requestLocation();
         if (MyApplication.getInstance().isNetworkActive()) {
-//            if (!isB2b)  //TODO 去除手机mac验证
-//                getMacByNet();
+
             loadWorkData(System.currentTimeMillis(), canShowTocat);
         } else if (canShowTocat) {
             iWorkView.showToast(R.string.networks_out, R.color.load_warning);
         }
+        if (mSignUtils == null) {
+            mSignUtils = new SignUtils(mSignListener);
+        }
         local();
     }
 
@@ -505,23 +508,51 @@ public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
     @Override
     public void submit(ArrayList<WorkModel> models, String macAddress) {
         if (isSubmitAble(models)) {
-            if (isB2b) {
-                Bundle bundle = new Bundle();
-                bundle.putParcelableArrayList("models", models);
-                signinWork(bundle, "");
-            } else {
-                submitWork(models, macAddress);
-            }
-//            else {
-//                if (iWorkView != null)
-//                    iWorkView.showFristMac();
+//            if (isB2b) {
+//                Bundle bundle = new Bundle();
+//                bundle.putParcelableArrayList("models", models);
+//                signinWork(bundle, "");
+//            } else {
+//                submitWork(models, macAddress);
 //            }
+            iWorkView.showLoading();
+            mSignUtils.sign(isB2b, null);
         }
+
     }
 
+    private SignUtils mSignUtils = null;
+    private SignUtils.SignListener mSignListener = new SignUtils.SignListener() {
+        @Override
+        public void sign(boolean signOk, String message) {
+            if (signOk) {
+                iWorkView.showModel(isFree, WorkModelDao.getInstance().query(true));
+            }
+            if (message.equals(StringUtil.getMessage(R.string.show_frist_mac))) {
+                iWorkView.showFristMac();
+            } else if (message.contains("不是考勤打卡常用设备,是否需要更换")) {
+                iWorkView.showErrorMac();
+            } else if (message.contains("设备正处于申请变更绑定阶段")) {
+                if (iWorkView != null) {
+                    iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
+                    iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
+                }
+            } else if (message.contains("该设备已被他人绑定")) {
+                iWorkView.showToast(R.string.mac_other, R.color.load_warning);
+                iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
+            } else {
+                iWorkView.showToast(message);
+            }
+            iWorkView.dimssLoading();
+        }
+    };
+
+
     public void submitByFrist(ArrayList<WorkModel> models, String macAddress) {
         if (isSubmitAble(models)) {
-            submitWork(models, macAddress);
+            iWorkView.showLoading();
+            mSignUtils.signFristMac(isB2b, null);
+//            submitWork(models, macAddress);
         }
     }
 

+ 17 - 7
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java

@@ -19,6 +19,7 @@ import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+import com.common.system.SystemUtil;
 import com.common.thread.ThreadUtil;
 import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiPlatform;
@@ -45,6 +46,7 @@ import com.core.utils.NotificationManage;
 import com.core.utils.OnGetDrivingRouteResult;
 import com.core.utils.TimeUtils;
 import com.core.utils.WorkHandlerUtil;
+import com.modular.apputils.utils.SwitchUtil;
 import com.modular.apputils.utils.VoiceUtils;
 import com.uas.appworks.OA.erp.activity.MissionActivity;
 import com.uas.appworks.OA.erp.activity.WorkActivity;
@@ -84,6 +86,10 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 
     private boolean signWorking = false;
 
+    public boolean isB2b() {
+        return isB2b;
+    }
+
     /**
      * 签到内勤
      *
@@ -105,13 +111,17 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
         if (isB2b) {
             signinWork(bundle, "");
         } else {
-//			validatorMac(model, macAddress);  // 关闭mac地址验证
-            CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-                @Override
-                public void result(boolean isOk, int result, String message) {
-                    signinWork(bundle, message);
-                }
-            });
+            if(SwitchUtil.needMacForSign()){
+                validatorMac(model, SystemUtil.getMac(MyApplication.getInstance()));  // 关闭mac地址验证
+            }else{
+                CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+                    @Override
+                    public void result(boolean isOk, int result, String message) {
+                        signinWork(bundle, message);
+                    }
+                });
+            }
+
         }
     }
 

+ 53 - 0
app_modular/appworks/src/main/java/com/uas/appworks/activity/B2BBusinessMainActivity.java

@@ -1,5 +1,6 @@
 package com.uas.appworks.activity;
 
+import android.content.Context;
 import android.content.Intent;
 import android.support.v7.app.ActionBar;
 import android.support.v7.widget.LinearLayoutManager;
@@ -15,6 +16,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.bumptech.glide.Glide;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.common.LogUtil;
 import com.common.data.DateFormatUtil;
@@ -39,6 +41,9 @@ import com.uas.appworks.adapter.B2bBusinessListAdapter;
 import com.uas.appworks.model.bean.B2BBusinessListBean;
 import com.uas.appworks.model.bean.B2BCompanyBean;
 import com.uas.appworks.presenter.WorkPlatPresenter;
+import com.youth.banner.Banner;
+import com.youth.banner.listener.OnBannerListener;
+import com.youth.banner.loader.ImageLoader;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -61,6 +66,7 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
     private TextView mPurchaseOrderAllTv, mCustomerInquiryAllTv, mPublicInquiryAllTv, mAccountSureTextView, mAccountCancelTextView;
     private RecyclerView mPurchaseOrderRv, mCustomerInquiryRv, mPublicInquiryRv, mAccountRecyclerView;
     private MaterialDialog mAccountDialog;
+    private Banner mHeaderBanner;
 
     private B2BCompanyBean mB2BCompanyBean;
     private SpanUtils mSpanUtils;
@@ -71,6 +77,18 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
     private boolean isPurchaseSuccess, isCustomerSuccess, isPublicSuccess;
     private int mSelectPosition = -1;
 
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mHeaderBanner.startAutoPlay();
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        mHeaderBanner.stopAutoPlay();
+    }
+
     @Override
     protected int getLayout() {
         return R.layout.activity_b2b_business_main;
@@ -102,6 +120,15 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
         mCustomerInquiryRv = $(R.id.b2b_business_main_customer_inquiry_rv);
         mPublicInquiryAllTv = $(R.id.b2b_business_main_public_inquiry_all_tv);
         mPublicInquiryRv = $(R.id.b2b_business_main_public_inquiry_rv);
+        mHeaderBanner = $(R.id.b2b_business_main_header_banner);
+        mHeaderBanner.setImageLoader(new ImageLoader() {
+            @Override
+            public void displayImage(Context context, Object path, ImageView imageView) {
+                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+                Glide.with(context).load(path).into(imageView);
+//                imageView.setImageResource((Integer) path);
+            }
+        });
 
         View accountView = View.inflate(mContext, R.layout.pop_b2b_change_account, null);
         mAccountRecyclerView = (RecyclerView) accountView.findViewById(R.id.b2b_change_account_rv);
@@ -157,6 +184,25 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
         mAccountSureTextView.setOnClickListener(this);
         mAccountCancelTextView.setOnClickListener(this);
 
+        mHeaderBanner.setOnBannerListener(new OnBannerListener() {
+            @Override
+            public void OnBannerClick(int position) {
+                switch (position) {
+                    case 0:
+                        startActivity(PurchaseOrderListActivity.class);
+                        break;
+                    case 1:
+                        startActivity(CustomerInquiryListActivity.class);
+                        break;
+                    case 2:
+                        startActivity(PublicInquiryListActivity.class);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        });
+
         mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
             @Override
             public void onRefresh(RefreshLayout refreshLayout) {
@@ -235,6 +281,13 @@ public class B2BBusinessMainActivity extends BaseMVPActivity<WorkPlatPresenter>
             mCompanyNameTextView.setText(companyName);
         }
 
+        List<Integer> headerImages = new ArrayList<>();
+        headerImages.add(R.drawable.ic_b2b_header_purchase);
+        headerImages.add(R.drawable.ic_b2b_header_customer);
+        headerImages.add(R.drawable.ic_b2b_header_public);
+        mHeaderBanner.setImages(headerImages);
+        mHeaderBanner.start();
+
         if (CommonUtil.isNetWorkConnected(mContext)) {
             showLoading(null);
             getListData(OBTAIN_PURCHASE_ORDER_LIST);

+ 11 - 2
app_modular/appworks/src/main/java/com/uas/appworks/model/DeviceMatch.java

@@ -5,8 +5,17 @@ package com.uas.appworks.model;
  */
 
 public class DeviceMatch {
-    //机型、机型设备列表名称、现有匹配设备数量、欠缺设备数量
-    private String code, name, existqty, lackqty,spec;
+    //机型、机型设备列表名称、现有匹配设备数量、欠缺设备数量,需求数量
+    private String code, name, existqty, lackqty,spec,needqty;
+
+
+    public String getNeedqty() {
+        return needqty;
+    }
+
+    public void setNeedqty(String needqty) {
+        this.needqty = needqty;
+    }
 
     public String getSpec() {
         return spec==null?"":spec;

BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_customer.png


BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_public.png


BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_b2b_header_purchase.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_customer.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_public.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_b2b_header_purchase.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_customer.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_public.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_b2b_header_purchase.png


+ 10 - 1
app_modular/appworks/src/main/res/layout/activity_b2b_business_main.xml

@@ -30,7 +30,8 @@
                 android:layout_height="100dp"
                 android:background="@color/white"
                 android:gravity="center_vertical"
-                android:orientation="horizontal">
+                android:orientation="horizontal"
+                android:visibility="gone">
 
                 <LinearLayout
                     android:id="@+id/b2b_business_main_purchase_order_iv"
@@ -118,6 +119,14 @@
 
             </LinearLayout>
 
+            <com.youth.banner.Banner
+                android:id="@+id/b2b_business_main_header_banner"
+                android:layout_width="match_parent"
+                android:layout_height="140dp"
+                app:delay_time="3000"
+                app:is_auto_play="true"
+                app:scroll_time="800" />
+
             <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"

+ 23 - 0
app_modular/appworks/src/main/res/layout/item_device_match.xml

@@ -53,6 +53,7 @@
 
 
     <LinearLayout
+        android:id="@+id/existqtyLL"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/specTag"
@@ -109,5 +110,27 @@
             android:paddingLeft="10dp"
             android:textSize="14sp" />
     </LinearLayout>
+    <TextView
+        android:id="@+id/needqtyTag"
+        android:layout_width="wrap_content"
+        android:layout_height="36dp"
+        android:layout_below="@id/existqtyLL"
+        android:layout_gravity="left"
+        android:layout_marginRight="10dp"
+        android:ellipsize="end"
+        android:gravity="center_vertical"
+        android:maxLines="2"
+        android:paddingLeft="@dimen/paddingMin"
+        android:text="需求数量"
+        android:textSize="14sp" />
 
+    <TextView
+        android:id="@+id/needqtyTv"
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:layout_toRightOf="@id/needqtyTag"
+        android:layout_alignTop="@id/needqtyTag"
+        android:gravity="center_vertical"
+        android:paddingLeft="10dp"
+        android:textSize="14sp" />
 </RelativeLayout>

+ 2 - 2
version.gradle

@@ -36,7 +36,7 @@ ext {
             leakcanaryVersion                   : '1.5',
             materialDialogsVersion              : '0.9.0.2',
             stickyGridHeadersVersion            : '1.0.1',
-            stickyListHeadersVersion            : '2.7.0',
+            stickyListHeadersVersion            : 'master-SNAPSHOT',
             activityOnCrashVersion              : '1.5.0',
             analyticsVersion                    : 'latest.integration',
             tagGroupVersion                     : '1.4@aar',
@@ -89,7 +89,7 @@ ext {
             tagGroup                     : 'me.gujun.android.taggroup:library:' + depsVersion.tagGroupVersion,
             analytics                    : 'com.umeng.analytics:analytics:' + depsVersion.analyticsVersion,
             activityOnCrash              : 'cat.ereza:customactivityoncrash:' + depsVersion.activityOnCrashVersion,
-            stickyListHeaders            : 'se.emilsjolander:stickylistheaders:' + depsVersion.stickyListHeadersVersion,
+            stickyListHeaders            : 'com.github.mtotschnig:StickyListHeaders:' + depsVersion.stickyListHeadersVersion,
             stickyGridHeaders            : 'com.github.TonicArtos:StickyGridHeaders:' + depsVersion.stickyGridHeadersVersion,
             materialDialogs              : 'com.afollestad.material-dialogs:core:' + depsVersion.materialDialogsVersion,
             leakcanary                   : 'com.squareup.leakcanary:leakcanary-android:' + depsVersion.leakcanaryVersion,