Selaa lähdekoodia

Merge remote-tracking branch 'origin/sheep_develop' into sheep_developer

# Conflicts:
#	app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java
#	app/src/main/java/com/kfzs/duanduan/react/TabsHelper.java
yuanshenglan 7 vuotta sitten
vanhempi
commit
0e4e300628
100 muutettua tiedostoa jossa 900 lisäystä ja 5182 poistoa
  1. 3 1
      .gitignore
  2. 0 1
      .idea/gradle.xml
  3. 0 1
      app/build.gradle
  4. 4 0
      app/src/main/AndroidManifest.xml
  5. 0 4
      app/src/main/java/com/kfzs/duanduan/KFZSApp.java
  6. 25 34
      app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java
  7. 1 2
      app/src/main/java/com/kfzs/duanduan/react/TabsHelper.java
  8. 33 31
      app/src/main/java/com/sheep/gamegroup/helper/TaskHelper.java
  9. 23 2
      app/src/main/java/com/sheep/gamegroup/model/entity/TaskAcceptedEty.java
  10. 12 3
      app/src/main/java/com/sheep/gamegroup/model/entity/TaskChild.java
  11. 151 11
      app/src/main/java/com/sheep/gamegroup/model/entity/TaskEty.java
  12. 19 0
      app/src/main/java/com/sheep/gamegroup/model/entity/TaskReleaseEty.java
  13. 1 1
      app/src/main/java/com/sheep/gamegroup/model/util/AutoTaskListUtil.java
  14. 4 4
      app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java
  15. 39 25
      app/src/main/java/com/sheep/gamegroup/util/DataUtil.java
  16. 1 1
      kfzslibrary/src/main/java/com/kfzs/libs/utils/DrawablesHelper.java
  17. 11 4
      app/src/main/java/com/sheep/gamegroup/util/GlideImageLoader.java
  18. 10 8
      app/src/main/java/com/sheep/gamegroup/util/Jump2View.java
  19. 2 1
      app/src/main/java/com/sheep/gamegroup/util/SysAppUtil.java
  20. 13 1
      app/src/main/java/com/sheep/gamegroup/view/activity/ActCreditCardTaskList.java
  21. 22 1
      app/src/main/java/com/sheep/gamegroup/view/activity/ActFindInformation.java
  22. 13 16
      app/src/main/java/com/sheep/gamegroup/view/activity/ActGameAgencyRecharge.java
  23. 11 1
      app/src/main/java/com/sheep/gamegroup/view/activity/ActMiDong.java
  24. 9 0
      app/src/main/java/com/sheep/gamegroup/view/activity/ActXinwanWeb.java
  25. 9 0
      app/src/main/java/com/sheep/gamegroup/view/activity/GamemakeMoneyAct.java
  26. 50 0
      app/src/main/java/com/sheep/gamegroup/view/activity/MiddleScreenShotAct.java
  27. 7 0
      app/src/main/java/com/sheep/gamegroup/view/activity/SignCardAct.java
  28. 140 27
      app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailAct.java
  29. 9 0
      app/src/main/java/com/sheep/gamegroup/view/activity/TryMakeMoneyact.java
  30. 1 1
      app/src/main/java/com/sheep/gamegroup/view/adapter/TaskListItemAdp.java
  31. 25 22
      app/src/main/java/com/sheep/gamegroup/view/adapter/TryMakeMoneyAdp.java
  32. 13 5
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtMyGame.java
  33. 4 7
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtTryMakeMoney.java
  34. 11 24
      app/src/main/java/com/sheep/jiuyan/samllsheep/service/FloatService.java
  35. 180 95
      app/src/main/java/com/sheep/jiuyan/samllsheep/service/FloatShotScreenService.java
  36. 11 13
      app/src/main/java/com/sheep/jiuyan/samllsheep/utils/TitleBarUtils.java
  37. 5 2
      app/src/main/res/drawable/shape_green_stroke_rectangle.xml
  38. 5 2
      app/src/main/res/drawable/shape_red_stroke_rectangle.xml
  39. 0 8
      app/src/main/res/drawable/shape_yellow_stroke_rectangle.xml
  40. 14 0
      app/src/main/res/layout/act_middle_screen_shot.xml
  41. 0 1
      app/src/main/res/layout/find_reservation_item.xml
  42. 9 0
      app/src/main/res/layout/try_makemoney_item_recommend.xml
  43. 0 11
      build.gradle
  44. 0 1
      kfzslibrary/.gitignore
  45. 0 58
      kfzslibrary/build.gradle
  46. 0 21
      kfzslibrary/proguard-rules.pro
  47. 0 26
      kfzslibrary/src/androidTest/java/com/kfzs/libs/ExampleInstrumentedTest.java
  48. 0 5
      kfzslibrary/src/main/AndroidManifest.xml
  49. 0 51
      kfzslibrary/src/main/java/com/kfzs/libs/DaggerActivity.java
  50. 0 61
      kfzslibrary/src/main/java/com/kfzs/libs/DaggerFragment.java
  51. 0 13
      kfzslibrary/src/main/java/com/kfzs/libs/IDaggerMvp.java
  52. 0 12
      kfzslibrary/src/main/java/com/kfzs/libs/IPresenter.java
  53. 0 10
      kfzslibrary/src/main/java/com/kfzs/libs/IView.java
  54. 0 13
      kfzslibrary/src/main/java/com/kfzs/libs/aop/Path.java
  55. 0 15
      kfzslibrary/src/main/java/com/kfzs/libs/aop/net/CheckNet.java
  56. 0 96
      kfzslibrary/src/main/java/com/kfzs/libs/aop/net/CheckNetAop.java
  57. 0 35
      kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/CheckPermission.java
  58. 0 116
      kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/CheckPermissionAop.java
  59. 0 48
      kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/Permission.java
  60. 0 26
      kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/PermissionHelper.java
  61. 0 270
      kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/RxPermissions.java
  62. 0 103
      kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/RxPermissionsFragment.java
  63. 0 28
      kfzslibrary/src/main/java/com/kfzs/libs/convert/HttpObservableTransformer.java
  64. 0 26
      kfzslibrary/src/main/java/com/kfzs/libs/convert/HttpObserver.java
  65. 0 17
      kfzslibrary/src/main/java/com/kfzs/libs/convert/StringConverter.java
  66. 0 28
      kfzslibrary/src/main/java/com/kfzs/libs/convert/StringConverterFactory.java
  67. 0 56
      kfzslibrary/src/main/java/com/kfzs/libs/convert/TConverterFactory.java
  68. 0 97
      kfzslibrary/src/main/java/com/kfzs/libs/convert/TResponseConverter.java
  69. 0 15
      kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpComponent.java
  70. 0 67
      kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpModule.java
  71. 0 14
      kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpScope.java
  72. 0 69
      kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpService.java
  73. 0 93
      kfzslibrary/src/main/java/com/kfzs/libs/dialog/BaseDialogFragment.java
  74. 0 37
      kfzslibrary/src/main/java/com/kfzs/libs/utils/ContextUtils.java
  75. 0 231
      kfzslibrary/src/main/java/com/kfzs/libs/utils/DeviceHelper.java
  76. 0 326
      kfzslibrary/src/main/java/com/kfzs/libs/utils/DisplayHelper.java
  77. 0 78
      kfzslibrary/src/main/java/com/kfzs/libs/utils/LangHelper.java
  78. 0 404
      kfzslibrary/src/main/java/com/kfzs/libs/utils/StatusBarHelper.java
  79. 0 101
      kfzslibrary/src/main/java/com/kfzs/libs/widget/CompleteCommitEditText.java
  80. 0 43
      kfzslibrary/src/main/java/com/kfzs/libs/widget/TimeEditText.java
  81. 0 63
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaButton.java
  82. 0 62
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaFrameLayout.java
  83. 0 60
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaImageButton.java
  84. 0 60
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaImageView.java
  85. 0 63
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaLinearLayout.java
  86. 0 63
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaRelativeLayout.java
  87. 0 62
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaTextView.java
  88. 0 67
      kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaViewHelper.java
  89. 0 37
      kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupItem.java
  90. 0 38
      kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupListHeaderView.java
  91. 0 293
      kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupListItemAccessoryView.java
  92. 0 210
      kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupListView.java
  93. 0 211
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/Loader.java
  94. 0 319
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/LoadingHelper.java
  95. 0 238
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/LoadingLayout.java
  96. 0 50
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/SupportLoadingFragment.java
  97. 0 49
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/TargetContext.java
  98. 0 127
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/viewport/ShowingViewport.java
  99. 0 29
      kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/viewport/SuccessViewport.java
  100. 0 0
      kfzslibrary/src/main/java/com/kfzs/libs/widget/navigation/Navigation.java

+ 3 - 1
.gitignore

@@ -7,4 +7,6 @@
 /build
 /captures
 .externalNativeBuild
-/.idea
+/.idea
+/kfzslibrary
+/banner

+ 0 - 1
.idea/gradle.xml

@@ -10,7 +10,6 @@
             <option value="$PROJECT_DIR$" />
             <option value="$PROJECT_DIR$/app" />
             <option value="$PROJECT_DIR$/datashare" />
-            <option value="$PROJECT_DIR$/kfzslibrary" />
             <option value="$PROJECT_DIR$/ucrop" />
             <option value="$PROJECT_DIR$/view" />
           </set>

+ 0 - 1
app/build.gradle

@@ -237,7 +237,6 @@ dependencies {
 
     //    compile 'com.google.zxing:core:3.3.0'
     compile project(':ucrop')
-    compile project(':kfzslibrary')
     compile('com.arialyy.aria:aria-core:3.3.16') {
         exclude group: 'com.android.support'
     }

+ 4 - 0
app/src/main/AndroidManifest.xml

@@ -374,6 +374,10 @@
         <activity
             android:name="com.sheep.gamegroup.view.activity.ActXiaomiGame"
             android:screenOrientation="portrait" />
+        <activity
+            android:name="com.sheep.gamegroup.view.activity.MiddleScreenShotAct"
+            android:theme="@style/MyDialogActivityTheme"
+            android:screenOrientation="user" />
 
         <!--友盟start-->
         <meta-data

+ 0 - 4
app/src/main/java/com/kfzs/duanduan/KFZSApp.java

@@ -12,14 +12,10 @@ import com.arialyy.aria.core.Aria;
 import com.kfzs.appstore.utils.restful.KFZSNetwork;
 import com.kfzs.duanduan.utils.ApkUtils;
 import com.sheep.gamegroup.util.ActivityManager;
-import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.service.DownloadService;
-import com.sheep.jiuyan.samllsheep.service.FloatService;
-import com.sheep.jiuyan.samllsheep.service.FloatShotScreenService;
 import com.sheep.jiuyan.samllsheep.utils.G;
 
-
 import java.io.File;
 import java.util.HashMap;
 import java.util.Map;

+ 25 - 34
app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java

@@ -104,9 +104,6 @@ import rx.schedulers.Schedulers;
 
 import static com.sheep.gamegroup.util.UMConfigUtils.Event.NEWBIE_TASK;
 
-/**
- *
- */
 public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContract.View, TryMakeMoneyContract.View {
 
     @BindView(R.id.upview1)
@@ -141,7 +138,6 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     NestedScrollView scrollView;
     @BindView(R.id.newbie_task)
     View newbie_task;
-
     @BindView(R.id.refresh)
     SwipeRefreshLayout refresh;
     @BindView(R.id.recyclerview)
@@ -198,15 +194,12 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
                     loadUserInfo();
                     break;
                 case 1:
-                    int position = 0;
-                    if (!ListUtil.isEmpty(allTaskAcceptedTaskList)) {
-                        tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RUN_TASK, allTaskAcceptedTaskList), position++);
-                    }
-                    if (!ListUtil.isEmpty(releaseEtyLists)) {
-                        tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RELEASE_TASK, releaseEtyLists), position++);
+                    tryMakeMoneyAdp.clear();
+                    if(!ListUtil.isEmpty(allTaskAcceptedTaskList)){
+                        tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RUN_TASK, allTaskAcceptedTaskList));
                     }
-                    while (position < LIST_COUNT) {
-                        tryMakeMoneyAdp.add(NULL, position++);
+                    if(!ListUtil.isEmpty(releaseEtyLists)) {
+                        tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RELEASE_TASK, releaseEtyLists));
                     }
                     tryMakeMoneyAdp.notifyDataSetChanged();
                     checkAndInitView();
@@ -227,7 +220,6 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
         TestUtil.testChange(activity, (TextView) getViewById(R.id.test_change));
         TestUtil.testChangeUser(activity, (TextView) getViewById(R.id.test_change_user));
         GlideImageLoader.setImage(bg_newbie_task, "http://cdngame.kuaifazs.com/bg_newbie_task.png");
-       // GlideImageLoader.setImage(ivDuty, "http://pic.616pic.com/ys_b_img/00/08/15/0Yc1l1EOfN.jpg");
         if (pagePresenter != null) {
             initData();
         }
@@ -330,7 +322,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
 
         //用户信息
         userEntity = DataUtil.getInstance().getUserEntity();
-        if (userEntity != null) {
+        if(userEntity != null){
             loadUserInfo();
         }
         //任务
@@ -343,13 +335,13 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
 
         //实时动态
         List<MoreDataEntity> cacheMoreDataEtyList = DataUtil.getInstance().getCacheList(ApiKey.award_detail, MoreDataEntity.class);
-        if (!ListUtil.isEmpty(cacheMoreDataEtyList)) {
+        if(!ListUtil.isEmpty(cacheMoreDataEtyList)){
             invite(cacheMoreDataEtyList);
         }
 
         //公告
         List<BulletinEnty> cacheBulletinEtyList = DataUtil.getInstance().getCacheList(ApiKey.bulletin, BulletinEnty.class);
-        if (ListUtil.isEmpty(cacheBulletinEtyList)) {
+        if(ListUtil.isEmpty(cacheBulletinEtyList)){
             homepageItemNoticeLayout.setVisibility(View.GONE);
         } else {
             bulletinEntyLists.clear();
@@ -358,7 +350,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
         }
         //轮播
         List<SlideshowEty> cacheSlideshowEtyList = DataUtil.getInstance().getCacheList(ApiKey.slideshow, SlideshowEty.class);
-        if (ListUtil.isEmpty(cacheSlideshowEtyList)) {
+        if(ListUtil.isEmpty(cacheSlideshowEtyList)){
             banner.setVisibility(View.GONE);
         } else {
             for (SlideshowEty slideshowEty : cacheSlideshowEtyList) {
@@ -370,7 +362,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
         }
         //首页list
         List<HomeListEntity> cacheHomeListEtyList = DataUtil.getInstance().getCacheList(ApiKey.home_list, HomeListEntity.class);
-        if (ListUtil.isEmpty(cacheHomeListEtyList)) {
+        if(ListUtil.isEmpty(cacheHomeListEtyList)){
             home_list_gridview_layout.setVisibility(View.GONE);
         } else {
             home_list_gridview_layout.setVisibility(View.VISIBLE);
@@ -473,7 +465,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
                                 1,
                                 0,
                                 0,
-                                "-1",
+                                 "-1",
                                 3));
         tryMakeMoneyPresenter.releaseTask(parameEty);
     }
@@ -513,7 +505,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
         }
         BaseMessage baseMessage = (BaseMessage) o;
         userEntity = baseMessage.getData(UserEntity.class);
-        if (userEntity == null) {
+        if(userEntity == null){
             return;
         }
         DataUtil.getInstance().setUserEntity(userEntity);
@@ -547,14 +539,12 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     public void giveUpTaskFailView(Object o) {
 
     }
-
     private int is_succession = 3;//所有
     private int show_game_task = 1;//包含游戏任务
-
     @Override
     public void returnTaskTaskUpdataView(Object object) {
         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.new_run_task(is_succession, show_game_task));
-        if (isNewData) {
+        if(isNewData) {
             BaseMessage baseMessage = (BaseMessage) object;
             allTaskAcceptedTaskList = baseMessage.getDataList(TaskAcceptedEty.class);
             AutoTaskListUtil.getInstance().loadList(allTaskAcceptedTaskList);
@@ -585,7 +575,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     @Override
     public void releaseTaskTaskUpdataView(Object object) {
         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.release_task);
-        if (isNewData && object instanceof BaseMessage) {
+        if(isNewData && object instanceof BaseMessage) {
             List<TaskReleaseEty> releaseEtyList = ((BaseMessage) object).getDataList(TaskReleaseEty.class);
             if (releaseEtyList != null) {
                 releaseEtyLists = releaseEtyList;
@@ -623,12 +613,13 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     @Override
     public void successSlideshow(BaseMessage baseMessage) {
         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.slideshow);
-        if (isNewData) {
+        if(isNewData){
             List<SlideshowEty> slideshowEtyList = baseMessage.getDataList(SlideshowEty.class);
             if (ListUtil.isEmpty(slideshowEtyList)) {
                 banner.setVisibility(View.GONE);
             } else {
                 slideshowEtyLists.clear();
+                slideshowTitleList.clear();
                 for (SlideshowEty slideshowEty : slideshowEtyList) {
                     slideshowEty.setObjects(CommonUtil.getInstance().getValue(slideshowEty.getExt()));
                     slideshowEtyLists.add(slideshowEty);
@@ -647,7 +638,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     @Override
     public void successbulletin(BaseMessage baseMessage) {
         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.bulletin);
-        if (isNewData) {
+        if(isNewData){
             List<BulletinEnty> bulletinEntyList = JSONArray.parseArray(JSONArray.toJSONString(baseMessage.getData()), BulletinEnty.class);
             if (ListUtil.isEmpty(bulletinEntyList)) {
                 homepageItemNoticeLayout.setVisibility(View.GONE);
@@ -663,7 +654,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     public void successhomeList(BaseMessage baseMessage) {
         checkAndInitView();
         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.home_list);
-        if (isNewData) {
+        if(isNewData){
             List<HomeListEntity> homeListEntityList = baseMessage.getDataList(HomeListEntity.class);
             if (ListUtil.isEmpty(homeListEntityList)) {
                 home_list_gridview_layout.setVisibility(View.GONE);
@@ -715,18 +706,16 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
         home_list_gridview_layout.setVisibility(View.GONE);
 
     }
-
     private int onResumeCount = 0;
-
     @Override
     public void onResume() {
         super.onResume();
         UserEntity result = DataUtil.getInstance().getUserEntity();
-        if (result == null) {
+        if(result == null) {
             CommonUtil.getInstance().updateUserInfo(new Action1<UserEntity>() {
                 @Override
                 public void call(UserEntity item) {
-                    if (item != null) {
+                    if(item != null) {
                         userEntity = item;
                         loadUserInfo();
                     }
@@ -736,9 +725,9 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
             userEntity = result;
             loadUserInfo();
         }
-        if (DataUtil.getInstance().isTaskListChange(getClass()))//数据变化才刷新
+        if(DataUtil.getInstance().isTaskListChange(getClass()))//数据变化才刷新
             refreshTaskList();
-        if (onResumeCount == 0)//第一次才调用
+        if(onResumeCount == 0)//第一次才调用
             Jump2View.getInstance().tryShowNewbieTask(activity, userEntity, newbie_task);
         onResumeCount++;
         viewRobDuty.setOnClickListener(new View.OnClickListener() {
@@ -849,6 +838,8 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     }
 
     private void bindBanner() {
+        //结束轮播
+        banner.stopAutoPlay();
         banner.setVisibility(View.VISIBLE);
         //设置图片加载器
         banner.setImageLoader(new ImageLoader() {
@@ -1005,7 +996,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
      * 点击一条公告
      */
     private void onClickNotice(BulletinEnty item) {
-        switch (item.getJumpType()) {// 跳转类型:11,任务 98,内部h5 99,外部h5
+        switch (item.getJumpType()){// 跳转类型:11,任务 98,内部h5 99,外部h5
             case 11:
                 Jump2View.getInstance().goTaskDetailView(activity, NumberFormatUtils.parseInteger(item.getJumpValue()));
                 break;

+ 1 - 2
app/src/main/java/com/kfzs/duanduan/react/TabsHelper.java

@@ -13,14 +13,13 @@ import com.kfzs.duanduan.KFZSApp;
 import com.kfzs.duanduan.adp.ViewPagerFragmentAdapter;
 import com.kfzs.duanduan.fragment.FgtPersonalCenter;
 import com.kfzs.duanduan.fragment.FgtSmallSheep;
-import com.kfzs.libs.utils.DrawablesHelper;
 import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.util.DrawablesHelper;
 import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.UMConfigUtils;
 import com.sheep.jiuyan.samllsheep.R;
 
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 

+ 33 - 31
app/src/main/java/com/sheep/gamegroup/helper/TaskHelper.java

@@ -376,42 +376,50 @@ public class TaskHelper {
      * @param taskReleaseEty
      */
     public static void setTaskTypeText(TextView textView, TaskReleaseEty taskReleaseEty) {
+        textView.setVisibility(View.VISIBLE);
         String[] textColor = getTaskTypeTextColor(taskReleaseEty.getTask());
         ViewUtil.setColorMapText(textView, String.format(Locale.CHINA, "%s", textColor[0]), textColor[0], textColor[1]);
-        textView.setBackgroundResource(getTaskTypeTextBg(taskReleaseEty.getTask()));
+        textView.setBackgroundResource(R.drawable.shape_blue_stroke_rectangle_no_lb);
         textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
         int padding = textView.getContext().getResources().getDimensionPixelSize(R.dimen.content_padding_2);
         textView.setPadding(4*padding, padding, 4*padding, padding);
     }
-    //    private int task_type = 1;// 1时间试玩任务 2 信用卡任务 3应用下载 4h5业务 1001畅思 1000连续任务, 1002 1003游戏任务 1002平台游戏,1003 腾讯游戏,1004 小米游戏
-    private static String[] getTaskTypeTextColor(TaskEty task) {
-        switch (task.getTask_type()){
-            case 1002:
-            case 1003:
-            case 1004:
-                return new String[]{"游戏任务", "#F81B5F"};
-            case 1000:
-                return new String[]{"连续任务", "#2FA255"};
-            default:
-                return new String[]{"试玩任务", "#FFA21C"};
-        }
+    /**
+     * 设置游戏标识文本,如:现金,福利
+     * @param textView
+     * @param taskReleaseEty
+     */
+    public static void setTaskTagText(TextView textView, TaskReleaseEty taskReleaseEty) {
+        textView.setVisibility(View.VISIBLE);
+        ViewUtil.setColorMapText(textView, String.format(Locale.CHINA, "%s", taskReleaseEty.getCashOrWelfare()), taskReleaseEty.getCashOrWelfare(), "#FD2D54");
+        textView.setBackgroundResource(R.drawable.shape_red_stroke_rectangle_no_lb);
+        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
+        int padding = textView.getContext().getResources().getDimensionPixelSize(R.dimen.content_padding_2);
+        textView.setPadding(4*padding, padding, 4*padding, padding);
     }
     //    private int task_type = 1;// 1时间试玩任务 2 信用卡任务 3应用下载 4h5业务 1001畅思 1000连续任务, 1002 1003游戏任务 1002平台游戏,1003 腾讯游戏,1004 小米游戏
-    private static int getTaskTypeTextBg(TaskEty task) {
+    private static String[] getTaskTypeTextColor(TaskEty task) {
         switch (task.getTask_type()){
             case 1002:
             case 1003:
             case 1004:
-                return R.drawable.shape_green_stroke_rectangle;
+                return new String[]{"游戏任务", "#4889FF"};//已经修改为一种颜色了
             case 1000:
-                return R.drawable.shape_red_stroke_rectangle;
+                return new String[]{"连续任务", "#4889FF"};
             default:
-                return R.drawable.shape_yellow_stroke_rectangle;
+                return new String[]{"试玩任务", "#4889FF"};
         }
     }
 
     /**
      * 设置当前子任务为选中状态
+     1、 任务未开启时——即将开启
+     2、 任务未领取时——可领取
+     3、 任务已领取待完成时——进行中
+     4、 任务已提交待审核——待审核
+     5、 任务审核通过——已完成
+     6、 任务审核失败——审核失败
+     7、任务已过期未完成——已过期
      * @param taskEty
      */
     public static void setSelectFlag(TaskEty taskEty) {
@@ -421,27 +429,21 @@ public class TaskHelper {
         TaskChild selectTaskChild = null;
         outFor: for (TaskChild taskChild : taskChildList) {
             switch (taskChild.getStatus()){
-                case 0:
-                case 1:
                 case 2:
                 case 3:
-                case 4:
-                case 6:
+                case 6://找到可领取或者进行中或者审核失败则直接退出循环
                     selectTaskChild = taskChild;
                     break outFor;
+                case 0:
+                case 1:
+                case 4:
+                case 5:
+                    if(selectTaskChild == null)
+                        selectTaskChild = taskChild;
+                    break;
             }
         }
         if(selectTaskChild != null)
             selectTaskChild.setSelectFlag(true);
-
-    /*
-    1、 任务未开启时——即将开启
-2、 任务未领取时——可领取
-3、 任务已领取待完成时——进行中
-4、 任务已提交待审核——待审核
-5、 任务审核通过——已完成
-6、 任务审核失败——审核失败
-7、任务已过期未完成——已过期
-     */
     }
 }

+ 23 - 2
app/src/main/java/com/sheep/gamegroup/model/entity/TaskAcceptedEty.java

@@ -14,6 +14,7 @@ public class TaskAcceptedEty implements Serializable{
     private int release_task_id;// 0,
     private String remarks;// "string",
     private String screenshots;// "string",
+    private int cash_task;// 1.现金任务 2福利任务
     private int status =1;// 0,--------1,已接受任务 2,正在进行中,3完成任务,4放弃任务,5任务失败,6审核失败,7提交审核,8任务已下线,9至少完成了一个任务了
     private String uid;// 0,
     private String update_time;// 0
@@ -128,6 +129,14 @@ public class TaskAcceptedEty implements Serializable{
         this.lower_num = lower_num;
     }
 
+    public int getCash_task() {
+        return cash_task;
+    }
+
+    public void setCash_task(int cash_task) {
+        this.cash_task = cash_task;
+    }
+
     @Override
     public boolean equals(Object obj) {
         return obj instanceof TaskAcceptedEty &&
@@ -135,8 +144,20 @@ public class TaskAcceptedEty implements Serializable{
     }
 
 
-
-
+    /**
+     * 获取任务标签:现金或者福利
+     * 1.现金任务 2福利任务
+     * @return
+     */
+    public String getCashText(){
+        switch (cash_task){
+            case 1:
+                return "现金";
+            case 2:
+            default:
+                return "福利";
+        }
+    }
     public boolean isIs_running() {
         return status == 1 || status == 2;
     }

+ 12 - 3
app/src/main/java/com/sheep/gamegroup/model/entity/TaskChild.java

@@ -19,7 +19,8 @@ public class TaskChild implements Serializable {
     private String EndTime;//1530115200,
     private String Desc;//"<p>阿斯顿发射的发</p>",
     private String Amount;//1,
-    private String Id;//8,
+    private int Id;//8,
+    private int already_accepted_task_id;//8,
     private String task_id;//161,
     private String Time;//0,
     private String Name;//"212312311111111",
@@ -148,11 +149,11 @@ public class TaskChild implements Serializable {
         Amount = amount;
     }
 
-    public String getId() {
+    public int getId() {
         return Id;
     }
 
-    public void setId(String id) {
+    public void setId(int id) {
         Id = id;
     }
 
@@ -188,6 +189,14 @@ public class TaskChild implements Serializable {
         TaskType = taskType;
     }
 
+    public int getAlready_accepted_task_id() {
+        return already_accepted_task_id;
+    }
+
+    public void setAlready_accepted_task_id(int already_accepted_task_id) {
+        this.already_accepted_task_id = already_accepted_task_id;
+    }
+
     /**
      * 重组desc字段
      * @param desc

+ 151 - 11
app/src/main/java/com/sheep/gamegroup/model/entity/TaskEty.java

@@ -1,5 +1,6 @@
 package com.sheep.gamegroup.model.entity;
 
+import android.support.annotation.IntDef;
 import android.text.TextUtils;
 
 import com.alibaba.fastjson.JSONArray;
@@ -8,6 +9,8 @@ import com.sheep.gamegroup.model.api.IDownload;
 import com.sheep.gamegroup.util.ListUtil;
 
 import java.io.Serializable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.List;
 
 /**
@@ -330,17 +333,6 @@ public class TaskEty implements Serializable, IDownload {
         return task_type != 2 && task_type != 4;//// 1时间试玩任务 2 信用卡任务 3应用下载 4h5业务 1001畅思
     }
 
-    public boolean hasChildInReview() {
-        if(!ListUtil.isEmpty(child)){
-            for (TaskChild taskChild : child) {
-                if(taskChild != null && taskChild.getStatus() == 4){//只要有一个子任务在审核中,就返回true
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
     /**
      * 重组desc字段
      * @param desc
@@ -433,4 +425,152 @@ public class TaskEty implements Serializable, IDownload {
         }
     }
 
+    /**
+     * 获取当前可领取子任务的id
+     *
+     1、 任务未开启时——即将开启
+     2、 任务未领取时——可领取
+     3、 任务已领取待完成时——进行中
+     4、 任务已提交待审核——待审核
+     5、 任务审核通过——已完成
+     6、 任务审核失败——审核失败
+     7、任务已过期未完成——已过期
+     * @return
+     */
+    public int getCanAcceptedChildId() {
+        if(!ListUtil.isEmpty(child)){
+            for (TaskChild taskChild : child) {
+                switch (taskChild.getStatus()) {
+                    case 2:
+                        return taskChild.getId();
+                }
+            }
+        }
+        return -1;
+    }
+    /**
+     * 获取正在进行中的子任务的id
+     *
+     1、 任务未开启时——即将开启
+     2、 任务未领取时——可领取
+     3、 任务已领取待完成时——进行中
+     4、 任务已提交待审核——待审核
+     5、 任务审核通过——已完成
+     6、 任务审核失败——审核失败
+     7、任务已过期未完成——已过期
+     * @return
+     */
+    public int getRunningChildId() {
+        if(!ListUtil.isEmpty(child)){
+            for (TaskChild taskChild : child) {
+                switch (taskChild.getStatus()) {
+                    case 3:
+                        return taskChild.getId();
+                }
+            }
+        }
+        return -1;
+    }
+    /**
+     * 获取正在进行中的子任务的id
+     *
+     1、 任务未开启时——即将开启
+     2、 任务未领取时——可领取
+     3、 任务已领取待完成时——进行中
+     4、 任务已提交待审核——待审核
+     5、 任务审核通过——已完成
+     6、 任务审核失败——审核失败
+     7、任务已过期未完成——已过期
+     * @return
+     */
+    public int getFailChildPosition() {
+        if(!ListUtil.isEmpty(child)){
+            int i = 0;
+            for (TaskChild taskChild : child) {
+                switch (taskChild.getStatus()) {
+                    case STATUS_FAIL:
+                        return i;
+                }
+                i++;
+            }
+        }
+        return -1;
+    }
+    public static final int STATUS_RUNNING = 3;//进行中
+    public static final int STATUS_FAIL= 6;//审核失败
+
+
+    @IntDef({STATUS_RUNNING, STATUS_FAIL})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface STATUS {
+    }
+    /**
+     * 根据状态获取当前第一个可提交子任务的already_accepted_task_id
+     *
+     1、 任务未开启时——即将开启
+     2、 任务未领取时——可领取
+     3、 任务已领取待完成时——进行中
+     4、 任务已提交待审核——待审核
+     5、 任务审核通过——已完成
+     6、 任务审核失败——审核失败
+     7、任务已过期未完成——已过期
+     * @return
+     */
+    public int getCanCommitChildRelease_task_id(@STATUS int status) {
+        if(!ListUtil.isEmpty(child)){
+            for (TaskChild taskChild : child) {
+                if(status == taskChild.getStatus()){
+                    return taskChild.getAlready_accepted_task_id();
+                }
+            }
+        }
+        return -1;
+    }
+    /**
+     * 获取当前第一个可提交子任务的already_accepted_task_id
+     *
+     1、 任务未开启时——即将开启
+     2、 任务未领取时——可领取
+     3、 任务已领取待完成时——进行中
+     4、 任务已提交待审核——待审核
+     5、 任务审核通过——已完成
+     6、 任务审核失败——审核失败
+     7、任务已过期未完成——已过期
+     * @return
+     */
+    public int getCanCommitChildRelease_task_id() {
+        //先找审核失败的子任务
+        int commitScreenShotTaskId = getCanCommitChildRelease_task_id(TaskEty.STATUS_FAIL);
+        //再找进行中的子任务
+        if(commitScreenShotTaskId < 1){
+            commitScreenShotTaskId = getCanCommitChildRelease_task_id(TaskEty.STATUS_RUNNING);
+        }
+        return commitScreenShotTaskId;
+    }
+
+    /**
+     * 有子任务可以接受
+     * @return
+     */
+    public boolean hasChildCanAccepted() {
+        return getCanAcceptedChildId() > 0;
+    }
+    /**
+     * 有子任务正在进行中
+     * @return
+     */
+    public boolean hasChildRunning() {
+        return getRunningChildId() > 0;
+    }
+
+    /**
+     * 传入的上一次提交的id是最后一个子任务的already_accepted_task_id
+     * 或者传入的是一个普通任务的id
+     * @param lastCommitId
+     * @return
+     */
+    public boolean hasCommitLast(int lastCommitId) {
+        TaskChild taskChild = ListUtil.getLast(child);
+        return taskChild == null || taskChild.getAlready_accepted_task_id() == lastCommitId;
+    }
 }

+ 19 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/TaskReleaseEty.java

@@ -17,6 +17,7 @@ public class TaskReleaseEty implements Serializable{
     private String deadline;// 0,
     private String duration;// 0,
     private int id;// 0,
+    private int cash_task;// 0,
     private String last_num;// 0,
     private String name;//private String string",
     private String online_time;// 0,
@@ -243,12 +244,30 @@ public class TaskReleaseEty implements Serializable{
         this.task = task;
     }
 
+    public int getCash_task() {
+        return cash_task;
+    }
+
+    public void setCash_task(int cash_task) {
+        this.cash_task = cash_task;
+    }
 
     @Override
     public boolean equals(Object obj) {
         return obj instanceof TaskReleaseEty && ((TaskReleaseEty) obj).getId() == id;
     }
 
+
+
+    public String getCashOrWelfare(){
+        switch (cash_task){
+            case 2:
+                return "福利";
+            case 1:
+            default:
+                return "现金";
+        }
+    }
     /**
      * 任务是否下线
      * @return

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/model/util/AutoTaskListUtil.java

@@ -88,7 +88,7 @@ public class AutoTaskListUtil {
     }
 
     public void loadList(List<TaskAcceptedEty> list) {
-        DataUtil.getInstance().addTaskAcceptedEtyList(list);//添加正在运行的任务列表到内存中
+//        DataUtil.getInstance().addTaskAcceptedEtyList(list);//添加正在运行的任务列表到内存中
         clear();
         if(list != null) {
             for (TaskAcceptedEty item : list) {

+ 4 - 4
app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java

@@ -454,10 +454,10 @@ public class CommonUtil {
             case 12://闲玩任务
                 Jump2View.getInstance().goXianwanWeb(context, null, null);
                 break;
-            case 13://游戏代充
+            case 13://游戏代充(游戏充值)
                 Jump2View.getInstance().goGameRecharge((Activity) context, null);
                 break;
-            case 14://幂动科技
+            case 14://幂动科技(简单任务)
                 Jump2View.getInstance().goMiDong((Activity) context, null);
                 break;
             case 15://小米游戏列表
@@ -633,7 +633,7 @@ public class CommonUtil {
                 state = " (已完成 )";
                 break;
             case 6:
-                state = " (审核失败)";
+                state = " (审核失败,请重新上传截图)";
                 break;
             case 7:
                 state = " (已过期 )";
@@ -767,7 +767,7 @@ public class CommonUtil {
             case DialogShare.COPY_SHARE_LINK:
                 LINK_SHARE.onEvent();
                 ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("分享链接").setMsg(realUrl)
-                        .setMsgMore("通过连接加入小绵羊即可成为你的好友").setMsgMoreColor(R.color.txt_black_9e9c9c)
+                        .setMsgMore("他人通过该链接加入小绵羊即可成为你的好友").setMsgMoreColor(R.color.txt_black_9e9c9c)
                         .setBtnLeftText("复制链接").setBtnLeftOnClickListener(new View.OnClickListener() {
                             @Override
                             public void onClick(View view) {

+ 39 - 25
app/src/main/java/com/sheep/gamegroup/util/DataUtil.java

@@ -18,6 +18,7 @@ import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.model.util.AutoTaskListUtil;
 import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.service.FloatShotScreenService;
 import com.sheep.jiuyan.samllsheep.utils.FileUtil;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
@@ -44,6 +45,7 @@ public class DataUtil {
     private ACache aCache;
 
     private DataUtil() {
+        LogUtil.println("DataUtil", "init");
         aCache = ACache.get(SheepApp.getInstance());
         userEntity = getCacheResult(ApiKey.get_info, UserEntity.class);//先从缓存中初始化用户信息
         String id = SpUtils.getToken(SheepApp.mContext);
@@ -219,7 +221,7 @@ public class DataUtil {
     }
 
     public boolean isNewData(String key) {
-        return !TextUtils.equals(aCache.getAsString(ApiKey.oldEqualsNew(key)), "yes");//新老数据不同,说明是新数据
+        return !TextUtils.equals(aCache.getAsString(ApiKey.oldEqualsNew(SheepApp.getInstance().getConnectAddress().getAppUrl() + "v1/" + key)), "yes");//新老数据不同,说明是新数据
     }
 
     //-----------------------------------------缓存数据部分-----------------------------------------------------结束
@@ -281,7 +283,7 @@ public class DataUtil {
         return null;
     }
     //是否使用小绵羊截图方案
-    public static final boolean IS_USE_SCREEN_SHOT = BuildConfig.DEBUG;
+    public static final boolean IS_USE_SCREEN_SHOT = false;//BuildConfig.DEBUG;
     /**
      * 截图路径
      *
@@ -344,7 +346,7 @@ public class DataUtil {
         switch (requestCode) {
             case REQUEST_MEDIA_PROJECTION:
                 if (resultCode == RESULT_OK && data != null) {
-                    DataUtil.getInstance().putData(REQUEST_CAPTURE_PERMISSION, data);
+                    FloatShotScreenService.getInstance().setResultData(data);
                     if (action1 != null)
                         action1.call(0);
                 }
@@ -396,27 +398,39 @@ public class DataUtil {
         }
         return null;
     }
-    //正在运行的任务
-    List<TaskAcceptedEty> taskAcceptedEtyList = ListUtil.emptyList();
-    public void addTaskAcceptedEtyList(List<TaskAcceptedEty> list) {
-        taskAcceptedEtyList.clear();
-        taskAcceptedEtyList.addAll(list);
-    }
-
-    /**
-     * 通过包名从内存中正在运行的任务列表中获取正在运行的任务
-     * @param pacageName
-     * @return
-     */
-    public TaskAcceptedEty getTaskAcceptedEtyFromPackageName(String pacageName) {
-        if(!TextUtils.isEmpty(pacageName))
-            for (TaskAcceptedEty taskAcceptedEty : taskAcceptedEtyList) {
-                if(taskAcceptedEty != null && taskAcceptedEty.getRelease_task() != null && taskAcceptedEty.getRelease_task().getTask() != null
-                        && TextUtils.equals(taskAcceptedEty.getRelease_task().getTask().getPackage_names(), pacageName)){
-                    return taskAcceptedEty;
-                }
-            }
-        return null;
-    }
+//    //正在运行的任务
+//    List<TaskAcceptedEty> taskAcceptedEtyList = ListUtil.emptyList();
+//    public void addTaskAcceptedEtyList(List<TaskAcceptedEty> list) {
+//        isInitTaskAcceptedList = true;
+//        taskAcceptedEtyList.clear();
+//        taskAcceptedEtyList.addAll(list);
+//        LogUtil.println("DataUtil", "taskAcceptedEtyList", taskAcceptedEtyList.size());
+//    }
+//
+//    /**
+//     * 通过包名从内存中正在运行的任务列表中获取正在运行的任务
+//     * @param pacageName
+//     * @return
+//     */
+//    public TaskAcceptedEty getTaskAcceptedEtyFromPackageName(String pacageName) {
+//        if(!TextUtils.isEmpty(pacageName))
+//            for (TaskAcceptedEty taskAcceptedEty : taskAcceptedEtyList) {
+//                if(taskAcceptedEty != null && taskAcceptedEty.getRelease_task() != null && taskAcceptedEty.getRelease_task().getTask() != null
+//                        && TextUtils.equals(taskAcceptedEty.getRelease_task().getTask().getPackage_names(), pacageName)){
+//                    return taskAcceptedEty;
+//                }
+//            }
+//        return null;
+//    }
+//
+//    private boolean isInitTaskAcceptedList = false;
+//
+//    public boolean isInitTaskAcceptedList() {
+//        return isInitTaskAcceptedList;
+//    }
+//
+//    public List<TaskAcceptedEty> getTaskAcceptedEtyList() {
+//        return taskAcceptedEtyList;
+//    }
     //-----------------------------------------其它数据部分-----------------------------------------------------结束
 }

+ 1 - 1
kfzslibrary/src/main/java/com/kfzs/libs/utils/DrawablesHelper.java

@@ -1,4 +1,4 @@
-package com.kfzs.libs.utils;
+package com.sheep.gamegroup.util;
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;

+ 11 - 4
app/src/main/java/com/sheep/gamegroup/util/GlideImageLoader.java

@@ -80,10 +80,17 @@ public class GlideImageLoader {
                 .into(imageView);
     }
     public static void setGameImage(ImageView imageView, String url) {
-        Glide.with(SheepApp.getInstance())
-                .load(url)
-                .apply(new RequestOptions().centerCrop().transform(new RoundedCorners(imageView.getResources().getDimensionPixelSize(R.dimen.content_padding_10))).placeholder(R.drawable.loading_01))
-                .into(imageView);
+        if(url.endsWith(".gif")){//gif图片不做任务处理
+            Glide.with(SheepApp.getInstance())
+                    .load(url)
+                    .apply(new RequestOptions().placeholder(R.drawable.loading_01))
+                    .into(imageView);
+        } else {
+            Glide.with(SheepApp.getInstance())
+                    .load(url)
+                    .apply(new RequestOptions().centerCrop().transform(new RoundedCorners(imageView.getResources().getDimensionPixelSize(R.dimen.content_padding_10))).placeholder(R.drawable.loading_01))
+                    .into(imageView);
+        }
     }
     public static void setGameImage(ImageView imageView, String url, int radius) {
         Glide.with(SheepApp.getInstance())

+ 10 - 8
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -10,10 +10,6 @@ import android.text.TextUtils;
 import android.view.Gravity;
 import android.view.View;
 
-import com.alibaba.fastjson.JSONObject;
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.request.RequestOptions;
 import com.kfzs.duanduan.ActMain;
 import com.kfzs.duanduan.bean.KFIntentKeys;
 import com.sheep.gamegroup.absBase.BaseActivity;
@@ -132,6 +128,7 @@ import static com.sheep.gamegroup.util.UMConfigUtils.Event.USER_MY_MONEY;
 import static com.sheep.gamegroup.util.UMConfigUtils.Event.USER_NEW_VERSION;
 import static com.sheep.gamegroup.util.UMConfigUtils.Event.USER_TASK_RECORD;
 import static com.sheep.gamegroup.util.UMConfigUtils.Event.XIAOMI_GAME_LIST;
+import static com.sheep.jiuyan.samllsheep.service.FloatShotScreenService.SET_SHOW_OR_HIDE;
 
 /**
  * Created by ljy on 2018/3/18.
@@ -261,7 +258,7 @@ public class Jump2View {
                 }
 
                 if(userEntity != null && userEntity.canBindMobile()
-                    //&& !BuildConfig.DEBUG
+                    && !BuildConfig.DEBUG
                         ){//老用户没有绑定手机号
                     Jump2View.getInstance().goBindPhone(activity, 2);
                     return;
@@ -287,7 +284,7 @@ public class Jump2View {
                 }
 
                 if(userEntity != null && userEntity.canBindMobile()
-//                        && !BuildConfig.DEBUG
+                        && !BuildConfig.DEBUG
                         ){//老用户没有绑定手机号
                     Jump2View.getInstance().goBindPhone(activity, 1);
                     return;
@@ -982,10 +979,15 @@ public class Jump2View {
      * 启动小绵羊悬浮窗
      * @param context
      */
-    public void startShotScreenFloat(Context context, boolean isShow) {
+    public void startShotScreenFloat(Context context, Object object) {
         if(DataUtil.IS_USE_SCREEN_SHOT) {
             Intent intent = new Intent(context, FloatShotScreenService.class);
-            intent.putExtra("isShow", isShow);
+            if(object instanceof Boolean) {
+                intent.putExtra("isShow", (Boolean) object);
+                intent.putExtra("type", SET_SHOW_OR_HIDE);
+            } else if(object instanceof Integer){
+                intent.putExtra("type", (Integer) object);
+            }
             context.startService(intent);
         }
     }

+ 2 - 1
app/src/main/java/com/sheep/gamegroup/util/SysAppUtil.java

@@ -33,6 +33,7 @@ import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.model.entity.Version;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
@@ -457,7 +458,7 @@ public class SysAppUtil {
             return;
         }
         boolean isNewApp;
-        if(TestUtil.isSheep()) {
+        if(TextUtils.equals("sheep", BuildConfig.FLAVOR)) {
             if(ignoreMd5 != null && TextUtils.equals(ignoreMd5, version.getVersion_number()+"") && !version.isForceUpdate()){
                 LogUtil.println("showVersionInfo", "忽略", ignoreMd5, version.getVersion_name());
                 if(action1 != null)

+ 13 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActCreditCardTaskList.java

@@ -1,8 +1,10 @@
 package com.sheep.gamegroup.view.activity;
 
+import android.app.Activity;
 import android.support.design.widget.TabLayout;
 import android.support.v4.app.Fragment;
 import android.support.v4.view.ViewPager;
+import android.view.View;
 
 import com.alibaba.fastjson.JSONObject;
 import com.kfzs.duanduan.fragment.FgtCreditCardProgressQuery;
@@ -10,8 +12,10 @@ import com.kfzs.duanduan.fragment.FgtCreditCardTaskList;
 import com.kfzs.duanduan.mine.GiftpackListAdapter;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.CreditCardProgressQuery;
+import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.util.UMConfigUtils;
+import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.gamegroup.absBase.AbsChooseImageActivity;
@@ -43,9 +47,17 @@ public class ActCreditCardTaskList extends AbsChooseImageActivity {
 
     @Override
     public void initView() {
+        final Activity activity = this;
         TitleBarUtils.getInstance()
                 .setTitle(this,"办卡赚钱")
-                .setTitleFinish(this);
+                .setTitleFinish(this)
+                .setRightImgBotton(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("温馨提示").setBtnLeftText("我知道了")
+                                .setMsg("该栏目为现金任务,参与好友提成。"));
+                    }
+                });
 
         mAdapter = new GiftpackListAdapter(getSupportFragmentManager(), getApplicationContext());
         mAdapter.add(new FgtCreditCardTaskList(), "任务列表");

+ 22 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActFindInformation.java

@@ -44,6 +44,7 @@ import org.afinal.simplecache.ApiKey;
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -78,6 +79,7 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
     View check_net_ll;
     @BindView(R.id.view_list)
     RecyclerView view_list;
+    WebView find_information_content_wb;
     @Override
     public void initView() {
         id = getIntent().getIntExtra("id", 0);
@@ -144,7 +146,7 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
         ViewUtil.setText(find_information_time, String.format(Locale.CHINA, "发布时间:%s", TimeUtil.TimeStamp2Date(findItem.getCreated_at(), "yyyy-MM-dd HH:mm")));
         ViewUtil.setText(find_information_look, findItem.getClicks());
 
-        WebView find_information_content_wb = itemView.findViewById(R.id.find_information_content_wb);
+        find_information_content_wb = itemView.findViewById(R.id.find_information_content_wb);
         ViewUtil.loadDataWithBaseURL(find_information_content_wb, findItem.getContent());
         find_information_content_wb.setWebViewClient(new WebViewClient() {
             @Override
@@ -431,6 +433,13 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
         super.onResume();
         taskHelper.onResume();
         Aria.download(this).unRegister();
+        try {
+            if(find_information_content_wb != null){
+                find_information_content_wb.getClass().getMethod("onResume").invoke(find_information_content_wb, (Object[]) null);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
     @Override
@@ -456,4 +465,16 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
                 break;
         }
     }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if(find_information_content_wb != null){
+            try {
+                find_information_content_wb.getClass().getMethod("onPause").invoke(find_information_content_wb,  (Object[])null);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }

+ 13 - 16
app/src/main/java/com/sheep/gamegroup/view/activity/ActGameAgencyRecharge.java

@@ -65,22 +65,19 @@ public class ActGameAgencyRecharge extends BaseActivity {
         TitleBarUtils.getInstance()
                 .setTitleFinish(activity)
                 .setTitle(activity, "游戏充值")
-                .setShowRightTwoBtn(activity,
-                        R.mipmap.question_black_img,
-                        R.mipmap.search_black_img,
-                        new View.OnClickListener() {//问号
-                            @Override
-                            public void onClick(View v) {
-                                GAME_INSTEAD_OF_RECHARGE_HELP.onEvent();
-                                ViewUtil.showMsgDialog(activity, "充值请填写正确的游戏充值账号,角色信息,其他充值问题请联系客服。","充值帮助");
-                            }
-                        },
-                        new View.OnClickListener() {//搜索
-                            @Override
-                            public void onClick(View v) {
-                                Jump2View.getInstance().goGameSearch(activity, null);
-                            }
-                        });
+                .setRightSecondBtn(activity, R.mipmap.search_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        Jump2View.getInstance().goGameSearch(activity, null);
+                    }
+                })
+                .setRightImgBotton(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        GAME_INSTEAD_OF_RECHARGE_HELP.onEvent();
+                        ViewUtil.showMsgDialog(activity, "充值请填写正确的游戏充值账号,角色信息,其他充值问题请联系客服。","充值帮助");
+                    }
+                });
         setValue();//gridview data
         gridviewV();
     }

+ 11 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActMiDong.java

@@ -4,6 +4,7 @@ import android.app.Activity;
 import android.os.Bundle;
 import android.support.design.widget.TabLayout;
 import android.support.v4.view.ViewPager;
+import android.view.View;
 
 import com.kfzs.duanduan.event.BigEvent;
 import com.kfzs.duanduan.event.EventTypes;
@@ -13,9 +14,11 @@ import com.mdad.sdk.mdsdk.AdManager;
 import com.mdad.sdk.mdsdk.AppDownloadListener;
 import com.mdad.sdk.mdsdk.RewardListener;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.ListUtil;
 import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
@@ -54,7 +57,14 @@ public class ActMiDong extends BaseActivity {
         activity = this;
         TitleBarUtils.getInstance()
                 .setTitle(activity, "幂动任务")
-                .setTitleFinish(activity);
+                .setTitleFinish(activity)
+                .setRightImgBotton(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("温馨提示").setBtnLeftText("我知道了")
+                                .setMsg("该栏目为现金任务,不参与好友提成。"));
+                    }
+                });
     }
 
     @Override

+ 9 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/ActXinwanWeb.java

@@ -12,10 +12,12 @@ import android.webkit.WebViewClient;
 import android.widget.TextView;
 
 import com.kfzs.duanduan.BaseCompatActivity;
+import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.model.entity.XianWanEntity;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.DeviceIDUtil;
+import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.util.WebviewJs;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.utils.G;
@@ -65,6 +67,13 @@ public class ActXinwanWeb extends BaseCompatActivity {
                             activity.finish();
                         }
                     }
+                })
+                .setRightImgBotton(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("温馨提示").setBtnLeftText("我知道了")
+                                .setMsg("该栏目为现金任务,不参与好友提成。"));
+                    }
                 });
         tv_next.setVisibility(View.GONE);
         if(xianWanEntity == null){

+ 9 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/GamemakeMoneyAct.java

@@ -14,10 +14,12 @@ import android.widget.LinearLayout;
 import com.kfzs.duanduan.ActDownloadMgr;
 import com.kfzs.duanduan.event.BigEvent;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.model.entity.GridViewEntity;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.MyGridview;
 import com.sheep.gamegroup.util.UMConfigUtils;
+import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.view.adapter.AdpTryMakemoney;
 import com.sheep.gamegroup.view.adapter.AdpTrymakemoneyTabGridview;
 import com.sheep.gamegroup.view.fragment.FgtMyGame;
@@ -76,6 +78,13 @@ public class GamemakeMoneyAct extends BaseActivity {
         TitleBarUtils
                 .getInstance()
                 .setTitle(activity, title).setTitleFinish(activity)
+                .setRightSecondBtn(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("温馨提示").setBtnLeftText("我知道了")
+                                .setMsg("该栏目为日常福利,不可提现,不参与好友提成。"));
+                    }
+                })
                 .setRightImgBotton(activity, R.drawable.index_download, new View.OnClickListener() {
                     @Override
                     public void onClick(View view) {

+ 50 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/MiddleScreenShotAct.java

@@ -0,0 +1,50 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.media.projection.MediaProjectionManager;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.service.FloatShotScreenService;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import static com.sheep.gamegroup.util.DataUtil.REQUEST_MEDIA_PROJECTION;
+
+/**
+ * Created by realicing on 2018/5/10.
+ * realicing@sina.com
+ */
+public class MiddleScreenShotAct extends Activity {
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.act_middle_screen_shot);
+
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+            //5.0 之后才允许使用屏幕截图
+            MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) this.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
+            if (mediaProjectionManager != null) {
+                startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);
+                return;
+            }
+        }
+        G.showToast("您的系统版本过低,暂不支持该功能");
+    }
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        switch (requestCode) {
+            case REQUEST_MEDIA_PROJECTION:
+                if (resultCode == RESULT_OK && data != null) {
+                    FloatShotScreenService.getInstance().setResultData(data);
+//                    Jump2View.getInstance().startShotScreenFloat(this, FloatShotScreenService.SCREEN_SHOT);
+                    G.showToast("请重新点击小绵羊悬浮窗进行截图!");
+                    finish();
+                }
+                break;
+        }
+    }
+}

+ 7 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/SignCardAct.java

@@ -82,6 +82,13 @@ public class SignCardAct extends BaseActivity implements SignCardContract.View {
                 .getInstance()
                 .setTitle(activity, "每日打卡")
                 .setTitleFinish(activity)
+                .setRightSecondBtn(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("温馨提示").setBtnLeftText("我知道了")
+                                .setMsg("该栏目为日常活跃活动,收益可提现。"));
+                    }
+                })
                 .setRightBotton(activity, "战绩", 0, new View.OnClickListener() {
                     @Override
                     public void onClick(View v) {

+ 140 - 27
app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailAct.java

@@ -219,6 +219,16 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
         detail_task_listview.setAdapter(adpTaskDetailChildListview);
         adpTaskDetailChildListview.notifyDataSetChanged();
         bottom_btn_layout.setVisibility(View.GONE);
+        if(DataUtil.IS_USE_SCREEN_SHOT) {
+            //如果要使用小绵羊截图方案,则在进入任务详情界面启动FloatShotScreenService,并获取截屏权限,并把intent data传递给FloatShotScreenService
+            Jump2View.getInstance().startShotScreenFloat(SheepApp.getInstance(), null);
+            DataUtil.getInstance().requestCapturePermission(activity, new Action1<Integer>() {
+                @Override
+                public void call(Integer integer) {
+//                    if(BuildConfig.DEBUG) G.showToast("初始化截屏数据成功");
+                }
+            });
+        }
     }
 
     @Override
@@ -309,10 +319,68 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
             bottom_btn_layout.setVisibility(View.GONE);
         }
 
+        switch (taskEty.getTask_type()){
+            case 1000://连续任务
+                if(taskEty.isAppAutoCommitTask()){
+                    setBottomState2();
+                } else {//非应用自动审核的连续任务
+                    setSuccessionTaskBottomState();
+                }
+                break;
+            default:
+                setBottomState2();
+                break;
+        }
+    }
+
+    /**
+     * 设置非自动审核的连续任务底部按钮的状态
+     */
+    private void setSuccessionTaskBottomState() {
+        int failChildPosition = taskEty.getFailChildPosition();//获取第一个审核失败子任务的位置
+        boolean hasChildFail = failChildPosition > -1;//有子任务审核失败
+        boolean hasChildRunning = taskEty.hasChildRunning();//有子任务正在进行
+        boolean hasChildCanAccepted = taskEty.hasChildCanAccepted();//有子任务处于可领取状态
+
+        if(!hasChildFail && !hasChildRunning && hasChildCanAccepted){//没有审核失败的子任务和正在进行的子任务且有子任务处于可领取状态
+            bottom_btn_layout.setVisibility(View.VISIBLE);
+            btnTaskItem.setVisibility(View.VISIBLE);
+            btnUpImag.setVisibility(View.GONE);
+            btnTaskItem.setEnabled(true);
+            btnTaskItem.setText("领取任务");
+        } else if(hasChildRunning){//有子任务正在进行
+            bottom_btn_layout.setVisibility(View.VISIBLE);
+            btnTaskItem.setVisibility(View.VISIBLE);
+            btnUpImag.setVisibility(View.VISIBLE);
+            btnTaskItem.setEnabled(true);
+            btnTaskItem.setText(CommonUtil.START_PLAY);
+            btnUpImag.setEnabled(true);
+            btnUpImag.setText("上传截图");
+
+            setBottomState();
+        } else if(hasChildFail) {
+            bottom_btn_layout.setVisibility(View.VISIBLE);
+            btnTaskItem.setVisibility(View.VISIBLE);
+            btnUpImag.setVisibility(View.VISIBLE);
+            btnTaskItem.setEnabled(true);
+            btnTaskItem.setText(CommonUtil.START_PLAY);
+
+            setBottomState();
+        } else {
+            setBottomState2();
+        }
+        if(hasChildFail){
+            btnUpImag.setText(String.format(Locale.CHINA, "重新上传截图(第%d天)", failChildPosition + 1));
+        }
+    }
 
+    /**
+     * 根据TaskAcceptedEty中的status来设置底部两个按钮的状态
+     */
+    private void setBottomState2() {
         if(gettaskAcceptedEty != null){// && taskEty.getTask_type() == 1000) {//连续任务
             if(!TextUtils.isEmpty(gettaskAcceptedEty.getScreenshots())) {
-//                detailTaskTv.setVisibility(View.VISIBLE);//不显示截图
+                //                detailTaskTv.setVisibility(View.VISIBLE);//不显示截图
             }
             switch (gettaskAcceptedEty.getStatus()) {
                 case 1://"已接受任务";
@@ -352,7 +420,10 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
             }
         }
     }
-    //设置底部按钮状态
+
+    /**
+     * 正在进行的任务的状态设置
+     */
     private void setBottomState() {
         taskEty.setRunTask(1);
         setBtnStr(taskEty, mDownloadTaskService, new Action1<Object>(){
@@ -388,10 +459,6 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                                 btnUpImag.setVisibility(View.GONE);
                                 break;
                             case 2:
-                                if (taskEty.hasChildInReview()) {//只要有一个子任务在审核中,就不能进行其它操作
-                                    btnTaskItem.setEnabled(false);
-                                    btnTaskItem.setText("审核中");
-                                }
                                 if (type == DownloadTaskService.STATUS_INIT)
                                     btnUpImag.setVisibility(View.GONE);
                                 break;
@@ -584,12 +651,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                             ApkUtils.installApk(SheepApp.mContext, PackageUtil.isExistsFile(taskEty.getPackage_names()));
                             break;
                         case DownloadTaskService.STATUS_INSTALLED:
-                            DataUtil.getInstance().requestCapturePermission(activity, new Action1<Integer>() {
-                                @Override
-                                public void call(Integer integer) {
-                                    PackageUtil.startApp(SheepApp.mContext, taskEty.getPackage_names());
-                                }
-                            });
+                            PackageUtil.startApp(SheepApp.mContext, taskEty.getPackage_names());
                             break;
                         case 10:
                             Ext ext;
@@ -602,14 +664,20 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                     }
                     break;
                 case R.id.btn_up_imag:
-                    if(gettaskAcceptedEty.getStatus() ==3 &&taskEty.isGameTask()){
+                    if(gettaskAcceptedEty != null && gettaskAcceptedEty.getStatus() ==3 &&taskEty.isGameTask()){
                         if(taskEty.getThird_task_id() != null){
                             ViewUtil.showGamePayAccount(activity, taskEty.getThird_task_id(), taskReleaseEty.getName());
                             return;
                         }
                     }else if(taskEty.isGameTask()){
                         if(taskEty.isGameReservationCantDownload()){
-                            CommonUtil.getInstance().reservationGameTask(activity, taskReleaseEty, null);
+                            CommonUtil.getInstance().reservationGameTask(activity, taskReleaseEty, new Action1<Integer>() {
+                                @Override
+                                public void call(Integer integer) {
+                                    isFresh = true;
+                                    freshData();
+                                }
+                            });
                         } else {
                             accepteReceiveAward();
                         }
@@ -620,13 +688,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                             e.printStackTrace();
                         }
                     } else {//截图任务
-                        if(DataUtil.IS_USE_SCREEN_SHOT) {//小绵羊截图方案
-                            File dir = DataUtil.getInstance().getScreenShotsDir(taskEty.getPackage_names());
-                            showChooseDialog(false, true, DEFAULT_MAX_COUNT, dir);
-                        } else {//用户手动截图方案
-                            showChooseDialog(false, true, DEFAULT_MAX_COUNT);
-                        }
-                        UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_UPLOAD_PICTURE);
+                        commitScreenShot();
                     }
                     break;
                 case R.id.detail_share_friend_tv:
@@ -640,6 +702,31 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     }
 
     /**
+     * 发起选择图片来上传截图
+     */
+    private void commitScreenShot() {
+        switch (taskEty.getTask_type()){
+            case 1000://连续任务
+                commitScreenShotTaskId = taskEty.getCanCommitChildRelease_task_id();
+                break;
+            default:
+                commitScreenShotTaskId = taskReleaseEty.getAccepted_task_id() == 0 && gettaskAcceptedEty != null ? gettaskAcceptedEty.getId() : taskReleaseEty.getAccepted_task_id();
+                break;
+        }
+        if(commitScreenShotTaskId > 0) {
+            if (DataUtil.IS_USE_SCREEN_SHOT) {//小绵羊截图方案
+                File dir = DataUtil.getInstance().getScreenShotsDir(taskEty.getPackage_names());
+                showChooseDialog(false, true, DEFAULT_MAX_COUNT, dir);
+            } else {//用户手动截图方案
+                showChooseDialog(false, true, DEFAULT_MAX_COUNT);
+            }
+        } else {
+            G.showToast("暂无任务可以上传");
+        }
+        UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_UPLOAD_PICTURE);
+    }
+
+    /**
      * 尝试提交应用自动审核任务
      */
     private void checkAndCommitTask() {
@@ -662,6 +749,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
 
             object.put("task_time", runTime/1000);
             object.put("release_task_id", taskReleaseEty.getId());
+            addTaskChildId(object, taskEty);
             SheepApp.getInstance().getNetComponent().getApiService().commitAutoTask(object)
                     .subscribeOn(Schedulers.io())
                     .observeOn(AndroidSchedulers.mainThread())
@@ -693,6 +781,24 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     }
 
     /**
+     * 添加子任务id参数
+     * @param object
+     * @param taskEty
+     */
+    private void addTaskChildId(JSONObject object, TaskEty taskEty) {
+        switch (taskEty.getTask_type()){
+            case 1000://连续任务
+                int task_child_id = taskEty.getCanAcceptedChildId();
+                if(task_child_id < 1){
+                    G.showToast("暂无可以领取的任务");
+                    return;
+                }
+                object.put("task_child_id", task_child_id);
+                break;
+        }
+    }
+
+    /**
      * 任务进度
      */
     private void taskSchedule() {
@@ -754,10 +860,15 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
             DataUtil.getInstance().clearScreenShots();
         }
 
-        if(isFromTaskList)//之前界面为任务记录界面,需要回调刷新任务记录列表
-            setResult(RESULT_OK);
         UMConfigUtils.finishTask();
-        finish();
+        if(taskEty.hasCommitLast(commitScreenShotTaskId)){//非自动审核任务中的连续任务已经提交了最后一个子任务,或者普通任务提交截图成功
+            if (isFromTaskList)//之前界面为任务记录界面,需要回调刷新任务记录列表
+                setResult(RESULT_OK);
+            finish();
+        } else {
+            isFresh = true;
+            freshData();
+        }
     }
 
     @Override
@@ -793,12 +904,12 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     protected void onGetImage(String path) {
 
     }
-
+    private int commitScreenShotTaskId;
     @Override
     protected void onSetNetImageUrl(String data) {
         setLoaddingText("提交中");
         JSONObject jsonObject = new JSONObject();
-        jsonObject.put("id", taskReleaseEty.getAccepted_task_id() == 0 && gettaskAcceptedEty != null ? gettaskAcceptedEty.getId() : taskReleaseEty.getAccepted_task_id());
+        jsonObject.put("id", commitScreenShotTaskId);
         jsonObject.put("screenshots", data + "");
         jsonObject.put("remark", /*taskEty.getRemarks() +*/ "");
         jsonObject.put("package_name", taskEty.getPackage_names() + "");
@@ -860,6 +971,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
         JSONObject object = new JSONObject();
         object.put("device_id", DeviceUtil.getDeviceId(activity));
         object.put("release_task_id", taskReleaseEty.getId());
+        addTaskChildId(object, taskEty);
         SheepApp.getInstance()
                 .getNetComponent()
                 .getApiService()
@@ -994,7 +1106,8 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     @Override
     protected void onResume() {
         super.onResume();
-        if (taskReleaseEty == null){
+        if (taskReleaseEty == null || isFresh){
+            isFresh = true;
             freshData();
         } else {
             updateBottom();

+ 9 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/TryMakeMoneyact.java

@@ -10,7 +10,9 @@ import android.view.View;
 import com.kfzs.duanduan.ActDownloadMgr;
 import com.kfzs.duanduan.event.BigEvent;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.util.UMConfigUtils;
+import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.view.adapter.AdpTryMakemoney;
 import com.sheep.gamegroup.view.fragment.FgtTryMakeMoney;
 import com.sheep.jiuyan.samllsheep.R;
@@ -60,6 +62,13 @@ public class TryMakeMoneyact extends BaseActivity {
         TitleBarUtils
                 .getInstance()
                 .setTitle(activity, title).setTitleFinish(activity)
+                .setRightSecondBtn(activity, R.mipmap.question_black_img, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("温馨提示").setBtnLeftText("我知道了")
+                                .setMsg("该栏目为现金任务,参与好友提成。"));
+                    }
+                })
                 .setRightImgBotton(activity, R.drawable.index_download, new View.OnClickListener() {
                     @Override
                     public void onClick(View view) {

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/view/adapter/TaskListItemAdp.java

@@ -85,7 +85,7 @@ public class TaskListItemAdp extends BaseAdapter {
             return convertView;
         }
         ViewUtil.setText(holder.name_tv, ety.getRelease_task().getName());
-        ViewUtil.setText(holder.name_tv, TimeUtil.getDate(TimeUtil.FORMAT, NumberFormatUtils.parseLong(ety.getUpdate_time())));
+        ViewUtil.setText(holder.date_tv, TimeUtil.getDate(TimeUtil.FORMAT, NumberFormatUtils.parseLong(ety.getUpdate_time())));
         holder.price_tv.setText(returnValue(ety));
         convertView.setOnClickListener(new View.OnClickListener() {
             @Override

+ 25 - 22
app/src/main/java/com/sheep/gamegroup/view/adapter/TryMakeMoneyAdp.java

@@ -570,15 +570,7 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
                 }
                 viewHolder.itemView.setTag(TAG_ID_TEMP, etyList.get(i).getId());
                 ((TextView) viewHolder.itemView.findViewById(R.id.item_name_tv)).setText(taskReleaseEty.getName() + "");
-                switch (from) {
-                    case 1://来自主页
-                        TaskHelper.setTaskTypeText((TextView) viewHolder.itemView.findViewById(R.id.item_num_tv), taskReleaseEty);
-                        TaskHelper.setNumText((TextView) viewHolder.itemView.findViewById(R.id.item_num_tv1), taskReleaseEty);
-                        break;
-                    default:
-                        TaskHelper.setNumText((TextView) viewHolder.itemView.findViewById(R.id.item_num_tv), taskReleaseEty);
-                        break;
-                }
+                setCommonViewData(viewHolder.itemView, taskReleaseEty);
                 ((TextView) viewHolder.itemView.findViewById(R.id.item_money)).setText("+" + taskReleaseEty.getBonus() + "元");
 
                 GlideImageLoader.setGameImage((ImageView) viewHolder.itemView.findViewById(R.id.item_icon_iv), taskEty.getIcon());
@@ -709,6 +701,25 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
     }
 
     /**
+     * 一样相同组件与数据的设置
+     * @param itemView
+     * @param taskReleaseEty
+     */
+    private void setCommonViewData(View itemView, TaskReleaseEty taskReleaseEty) {
+        switch (from) {
+            case 1://来自主页
+                TaskHelper.setTaskTypeText((TextView) itemView.findViewById(R.id.item_num_tv), taskReleaseEty);
+                TaskHelper.setTaskTagText((TextView) itemView.findViewById(R.id.item_num_tv1), taskReleaseEty);
+                TaskHelper.setNumText((TextView) itemView.findViewById(R.id.item_num_tv2), taskReleaseEty);
+                break;
+            default:
+                TaskHelper.setTaskTagText((TextView) itemView.findViewById(R.id.item_num_tv), taskReleaseEty);
+                TaskHelper.setNumText((TextView) itemView.findViewById(R.id.item_num_tv1), taskReleaseEty);
+                break;
+        }
+    }
+
+    /**
      * 暂时这么处理,也许以后也是列表了
      * @param holder
      * @param etyList
@@ -756,15 +767,7 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
 
 
                 ((TextView)viewHolder.itemView.findViewById(R.id.item_name_tv)).setText(taskReleaseEty.getName()+"");
-                switch (from) {
-                    case 1://来自主页
-                        TaskHelper.setTaskTypeText((TextView) viewHolder.itemView.findViewById(R.id.item_num_tv), taskReleaseEty);
-                        TaskHelper.setNumText((TextView) viewHolder.itemView.findViewById(R.id.item_num_tv1), taskReleaseEty);
-                        break;
-                    default:
-                        TaskHelper.setNumText((TextView) viewHolder.itemView.findViewById(R.id.item_num_tv), taskReleaseEty);
-                        break;
-                }
+                setCommonViewData(viewHolder.itemView, taskReleaseEty);
                 ((TextView)viewHolder.itemView.findViewById(R.id.item_money)).setText("+"+ taskReleaseEty.getBonus() +"元");
                 if(!taskReleaseEty.getDeadline().equals("永久")){
                     ((TextView)viewHolder.itemView.findViewById(R.id.item_date_tv)).setText(
@@ -903,10 +906,10 @@ public class TryMakeMoneyAdp extends AdpCommonRecy<RecyleObj> {
     public boolean isEmpty() {
         switch (type){
             case 0://推荐任务
-
-                if(getmListDatas().get(0) != null
-                        && getmListDatas().get(0).getRecyleType() == RUN_TASK
-                        && ((List<TaskAcceptedEty>)getmListDatas().get(0).getDataObj()).size() > 0){
+                RecyleObj item;
+                if((item = ListUtil.getItem(getmListDatas(), 0)) != null
+                        && item.getRecyleType() == RUN_TASK
+                        && !ListUtil.isEmpty((List<TaskAcceptedEty>)item.getDataObj())){
                     return false;
                 }else {
                     return true;

+ 13 - 5
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtMyGame.java

@@ -122,12 +122,11 @@ public class FgtMyGame extends BaseFragment {
     private void initData() {
         refresh.setRefreshing(true);
         List<OrienteeringDetail> newList = DataUtil.getInstance().getCacheList(ApiKey.my_games, OrienteeringDetail.class);
-        if(newList == null){
-            refreshData();
-        } else {
-            list = newList;
+        if(!ListUtil.isEmpty(newList)) {
+            ListUtil.addAll(list, newList);
             notifyDataSetChanged();
         }
+        refreshData();
     }
     private void refreshData() {
         SheepApp.getInstance().getNetComponent().getApiService().getMyGames(page, per_page)
@@ -183,10 +182,19 @@ public class FgtMyGame extends BaseFragment {
         unbinder.unbind();
     }
 
+    private int onResumeCount = 0;
     @Override
     public void onResume() {
         super.onResume();
-        initData();
+        switch (onResumeCount){
+            case 0:
+                initData();//第一次先加载缓存
+                break;
+            default:
+                refreshData();
+                break;
+        }
+        onResumeCount++;
     }
 
     //在这里处理任务执行中的状态,如进度进度条的刷新

+ 4 - 7
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtTryMakeMoney.java

@@ -79,16 +79,13 @@ public class FgtTryMakeMoney extends BaseFragment implements TryMakeMoneyContrac
     private static final RecyleObj NULL = RecyleObj.make(RecyleType.NONE, null);//空数据
     private void notifyDataSetChanged(){
         checkAndInitView();
-        int position = 0;
+        tryMakeMoneyAdp.clear();
         if(!ListUtil.isEmpty(acceptedEtyList))
-            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RUN_TASK, acceptedEtyList), position++);
+            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RUN_TASK, acceptedEtyList));
         if(!ListUtil.isEmpty(releaseEtyLists))
-            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RELEASE_TASK, releaseEtyLists), position++);
+            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.RELEASE_TASK, releaseEtyLists));
         if(!ListUtil.isEmpty(releaseEtyListsBegin))
-            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.BEGIN_TASK, releaseEtyListsBegin), position++);
-        while(position < LIST_COUNT){
-            tryMakeMoneyAdp.add(NULL, position++);
-        }
+            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.BEGIN_TASK, releaseEtyListsBegin));
         tryMakeMoneyAdp.refreshAdapter();
         CommonUtil.getInstance().updateEmptyView(empty_view, tryMakeMoneyAdp.isEmpty() && releaseEtyLists.isEmpty() && releaseEtyListsBegin.isEmpty());
         refresh.setRefreshing(false);

+ 11 - 24
app/src/main/java/com/sheep/jiuyan/samllsheep/service/FloatService.java

@@ -137,12 +137,12 @@ public class FloatService extends Service {
             }
             LogUtil.println("FloatService", 6);
             if(!isAdded){
-                wm.addView(floatView, params);
+                windowManager.addView(floatView, params);
                 isAdded = true;
                 LogUtil.println("FloatService", 7);
             }
             btn_floatView.setText(String.format(Locale.CHINA,"约运行%s",TimeUtil.getHours(totalTimeInForeground)));
-            wm.updateViewLayout(floatView, params);
+            windowManager.updateViewLayout(floatView, params);
             LogUtil.println("FloatService", 8);
         }
 
@@ -154,7 +154,7 @@ public class FloatService extends Service {
         if (floatView != null) {
             try {
                 if(isAdded)
-                    wm.removeViewImmediate(floatView);
+                    windowManager.removeViewImmediate(floatView);
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -169,8 +169,8 @@ public class FloatService extends Service {
     private static final int HANDLE_CHECK_ACTIVITY = 200;
 
     private boolean isAdded = false; // 是否已增加悬浮窗
-    private static WindowManager wm;
-    private static WindowManager.LayoutParams params;
+    private WindowManager windowManager;
+    private WindowManager.LayoutParams params;
     private View floatView;
     private TextView btn_floatView;
 
@@ -213,8 +213,8 @@ public class FloatService extends Service {
                         if (!service.isAdded) {
                             try {
 //                            service.floatView.setAlpha(1.0f);
-//                            wm.updateViewLayout(service.floatView, params);
-                                wm.addView(service.floatView, params);
+//                            windowManager.updateViewLayout(service.floatView, params);
+                                service.windowManager.addView(service.floatView, service.params);
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
@@ -226,8 +226,8 @@ public class FloatService extends Service {
                         if (service.isAdded) {
                             try {
 //                            service.floatView.setAlpha(0.0f);
-//                            wm.updateViewLayout(service.floatView, params);
-                                wm.removeViewImmediate(service.floatView);
+//                            windowManager.updateViewLayout(service.floatView, params);
+                                service.windowManager.removeViewImmediate(service.floatView);
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
@@ -254,7 +254,7 @@ public class FloatService extends Service {
         floatView = inflater.inflate(R.layout.float_window, null);
         btn_floatView = floatView.findViewById(R.id.float_tv);
 
-        wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
+        windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
         params = new WindowManager.LayoutParams();
 
         // 设置window type
@@ -307,7 +307,7 @@ public class FloatService extends Service {
                             params.x = paramX + dx;
                             params.y = paramY + dy;
                             // 更新悬浮窗位置
-                            wm.updateViewLayout(floatView, params);
+                            windowManager.updateViewLayout(floatView, params);
                             isMove = true;
                             break;
                         case MotionEvent.ACTION_UP:
@@ -320,12 +320,6 @@ public class FloatService extends Service {
                     return false;
                 }
             });
-            floatView.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    //TODO 设置点击悬浮窗的响应
-                }
-            });
         } else {
             /*
              * 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
@@ -337,12 +331,5 @@ public class FloatService extends Service {
         params.width = WindowManager.LayoutParams.WRAP_CONTENT;
         params.height = WindowManager.LayoutParams.WRAP_CONTENT;
         params.gravity = Gravity.START | Gravity.BOTTOM;
-
-        try{
-            wm.addView(floatView, params);
-            isAdded = true;
-        }catch (Exception e){
-            e.printStackTrace();
-        }
     }
 }

+ 180 - 95
app/src/main/java/com/sheep/jiuyan/samllsheep/service/FloatShotScreenService.java

@@ -19,17 +19,22 @@ import android.os.Build;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
-import android.util.Log;
+import android.os.SystemClock;
+import android.util.DisplayMetrics;
+import android.view.Display;
+import android.view.GestureDetector;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.ImageView;
 
-import com.sheep.gamegroup.model.entity.TaskAcceptedEty;
 import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.GlobalScreenShot;
+import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.view.activity.MiddleScreenShotAct;
 import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;
 
 import java.io.File;
@@ -44,7 +49,6 @@ import rx.functions.Action1;
 import rx.functions.Func1;
 import rx.schedulers.Schedulers;
 
-import static com.sheep.gamegroup.util.DataUtil.REQUEST_CAPTURE_PERMISSION;
 
 /**
  * Created by realicing on 2018/5/8.
@@ -58,12 +62,17 @@ public class FloatShotScreenService extends Service {
     public IBinder onBind(Intent intent) {
         return null;
     }
+    private static FloatShotScreenService instance;
+
+    public static FloatShotScreenService getInstance() {
+        return instance;
+    }
 
     @Override
     public void onCreate() {
         super.onCreate();
+        instance = this;
         createFloatView();
-        createImageReader();
     }
 
     @Override
@@ -73,7 +82,7 @@ public class FloatShotScreenService extends Service {
         if (floatView != null) {
             try {
                 if(isAdded)
-                    wm.removeViewImmediate(floatView);
+                    windowManager.removeViewImmediate(floatView);
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -83,15 +92,16 @@ public class FloatShotScreenService extends Service {
         tearDownMediaProjection();
     }
 
-    //    public static final String OPERATION = "operation";
     public static final int OPERATION_SHOW = 100;
     public static final int OPERATION_HIDE = 101;
+    public static final int SCREEN_SHOT = 1;//截图回调
+    public static final int SET_SHOW_OR_HIDE = 2;//设置显示或不显示
 
     private static final int HANDLE_CHECK_ACTIVITY = 200;
 
     private boolean isAdded = false; // 是否已增加悬浮窗
-    private static WindowManager wm;
-    private static WindowManager.LayoutParams params;
+    private WindowManager windowManager;
+    private WindowManager.LayoutParams params;
     private View floatView;
 
 
@@ -100,11 +110,10 @@ public class FloatShotScreenService extends Service {
         if (intent != null) {
             int type = intent.getIntExtra("type", 0);
             switch (type) {
-                case 1:
-                    mResultData = (Intent) DataUtil.getInstance().getData(REQUEST_CAPTURE_PERMISSION);
+                case SCREEN_SHOT:
+                    performClick();
                     break;
-                case 0:
-                default:
+                case SET_SHOW_OR_HIDE:
                     if (intent.getBooleanExtra("isShow", true)) {
                         mHandler.sendEmptyMessageDelayed(OPERATION_SHOW, 1000L);
                     } else {
@@ -112,6 +121,8 @@ public class FloatShotScreenService extends Service {
                         mHandler.sendEmptyMessage(OPERATION_HIDE);
                     }
                     break;
+                default:
+                    break;
             }
         }
         return super.onStartCommand(intent, flags, startId);
@@ -138,8 +149,9 @@ public class FloatShotScreenService extends Service {
                     if (!service.isAdded) {
                         try {
 //                            service.floatView.setAlpha(1.0f);
-//                            wm.updateViewLayout(service.floatView, params);
-                            wm.addView(service.floatView, params);
+//                            windowManager.updateViewLayout(service.floatView, params);
+                            service.resetParams();
+                            service.windowManager.addView(service.floatView, service.params);
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
@@ -151,8 +163,8 @@ public class FloatShotScreenService extends Service {
                     if (service.isAdded) {
                         try {
 //                            service.floatView.setAlpha(0.0f);
-//                            wm.updateViewLayout(service.floatView, params);
-                            wm.removeViewImmediate(service.floatView);
+//                            windowManager.updateViewLayout(service.floatView, params);
+                            service.windowManager.removeViewImmediate(service.floatView);
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
@@ -173,7 +185,7 @@ public class FloatShotScreenService extends Service {
         imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_crop));
         floatView = imageView;
 
-        wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
+        windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
         params = new WindowManager.LayoutParams();
 
         // 设置window type
@@ -184,12 +196,12 @@ public class FloatShotScreenService extends Service {
 //        }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             //  大于等于 24 即为 7.0 及以上执行内容
-            Log.e("qx", "7.0");
+//            Log.e("qx", "7.0");
             params.type = WindowManager.LayoutParams.TYPE_PHONE; // 7.1
         } else {
             //  低于 24 即为 7.0 以下执行内容
             params.type = WindowManager.LayoutParams.TYPE_TOAST;   // 4.4
-            Log.e("qx", "4.4");
+//            Log.e("qx", "4.4");
 
         }
         /*
@@ -204,111 +216,87 @@ public class FloatShotScreenService extends Service {
                 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
         // 设置悬浮窗的Touch监听
         floatView.setOnTouchListener(new View.OnTouchListener() {
-            int lastX, lastY;
-            int paramX, paramY;
-            private boolean isMove = false;
-            private long downTime = 0;
-
+            GestureDetector mGestureDetector = new GestureDetector(getApplicationContext(), new FloatGestureTouchListener());
+            @Override
             public boolean onTouch(View v, MotionEvent event) {
-                switch (event.getAction()) {
-                    case MotionEvent.ACTION_DOWN:
-                        isMove = false;
-                        downTime = System.currentTimeMillis();
-                        lastX = (int) event.getRawX();
-                        lastY = (int) event.getRawY();
-                        paramX = params.x;
-                        paramY = params.y;
-                        break;
-                    case MotionEvent.ACTION_MOVE:
-                        int dx = (int) event.getRawX() - lastX;
-                        int dy = (int) event.getRawY() - lastY;
-                        params.x = paramX + dx;
-                        params.y = paramY + dy;
-                        // 更新悬浮窗位置
-                        wm.updateViewLayout(floatView, params);
-                        isMove = true;
-                        break;
-                    case MotionEvent.ACTION_UP:
-                        if (!isMove && System.currentTimeMillis() - downTime < 1000L) {//没有移动过并且小于1秒就弹起来就点击
-                            performClick();
-                        }
-                        isMove = false;
-                        break;
-                }
-                return false;
+                if(event == null)
+                    v.performClick();
+                return mGestureDetector.onTouchEvent(event);
             }
         });
 
+//        resetParams();
+//
+//        try {
+//            windowManager.addView(floatView, params);
+//            isAdded = true;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+    }
+
+    private void resetParams() {
+        Display display = windowManager.getDefaultDisplay();
+        DisplayMetrics metric = new DisplayMetrics();
+        display.getMetrics(metric);
         // 设置悬浮窗的长得宽
-        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+        params.width = SheepApp.getInstance().getResources().getDimensionPixelSize(R.dimen.content_padding_30);
         params.height = WindowManager.LayoutParams.WRAP_CONTENT;
         params.gravity = Gravity.START | Gravity.TOP;
-        params.x = G.WIDTH;
-        params.y = 100;
-
-        try {
-            wm.addView(floatView, params);
-            isAdded = true;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+        params.x = metric.widthPixels;
+        params.y = SheepApp.getInstance().getResources().getDimensionPixelSize(R.dimen.content_padding_100);
     }
 
     private void performClick() {
         //获取当前正在运行的程序的包名
-        String packageName = DataUtil.getInstance().getPackageNameInForeground();
-        if(DataUtil.getInstance().getTaskAcceptedEtyFromPackageName(packageName) == null){
-            //TODO 如果一个任务需要截取其它程序的截图,这里就不行了:如收到的短信
-            G.showToast("请切换到对应的应用后进行截图!");
-            return;
-        }
-        packageNameInForeground = packageName;
+        //不判断是否是正在进行的任务上截图,只在上传截图的地方获取指定包名的截图
+        packageNameInForeground = DataUtil.getInstance().getPackageNameInForeground();
         // 设置点击悬浮窗的响应
         startScreenShot();
     }
     private String packageNameInForeground;
 
     private void startScreenShot() {
-
-        floatView.setVisibility(View.GONE);
-
         Handler handler1 = new Handler();
         handler1.postDelayed(new Runnable() {
             public void run() {
-                //start virtual
-                startVirtual();
+                floatView.setVisibility(View.GONE);
             }
-        }, 5);
-
+        }, 0);
         handler1.postDelayed(new Runnable() {
             public void run() {
-                //capture the screen
-                startCapture();
-
+                //start virtual
+                startVirtual();
             }
-        }, 30);
+        }, 5);
 
     }
 
-    private void createImageReader() {
-
-        mImageReader = ImageReader.newInstance(G.WIDTH, G.HEIGHT, PixelFormat.RGBA_8888, 1);
+    private ImageReader createImageReader(DisplayMetrics metric) {
+        if(mImageReader == null) {
+            mImageReader = ImageReader.newInstance(metric.widthPixels, metric.heightPixels, PixelFormat.RGBA_8888, 1);
+        }
+        return mImageReader;
 
     }
 
     public void startVirtual() {
-        if (mMediaProjection != null) {
-            virtualDisplay();
-        } else if (mResultData == null && (mResultData = (Intent) DataUtil.getInstance().getData(REQUEST_CAPTURE_PERMISSION)) == null) {
-            G.showToast("请重新点击开始试玩");
+        if (mResultData == null) {
+            floatView.setVisibility(View.VISIBLE);
+            Intent intent = new Intent(getApplicationContext(), MiddleScreenShotAct.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            startActivity(intent);
+            LogUtil.println("FloatShotScreenService", "没有mResultData");
         } else {
-            setUpMediaProjection();
             virtualDisplay();
         }
     }
 
-    public void setUpMediaProjection() {
-        mMediaProjection = getMediaProjectionManager().getMediaProjection(Activity.RESULT_OK, mResultData);
+    public MediaProjection setUpMediaProjection() {
+        if(mMediaProjection == null) {
+            mMediaProjection = getMediaProjectionManager().getMediaProjection(Activity.RESULT_OK, mResultData);
+        }
+        return mMediaProjection;
     }
 
     private MediaProjectionManager getMediaProjectionManager() {
@@ -317,15 +305,20 @@ public class FloatShotScreenService extends Service {
     }
 
     private void virtualDisplay() {
-        mVirtualDisplay = mMediaProjection.createVirtualDisplay("screen-mirror",
-                G.WIDTH, G.HEIGHT, G.DENSITY_DPI, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
-                mImageReader.getSurface(), null, null);
-    }
+        Display display = windowManager.getDefaultDisplay();
+        DisplayMetrics metric = new DisplayMetrics();
+        display.getMetrics(metric);
 
-    private void startCapture() {
+        mImageReader = createImageReader(metric);
+        mVirtualDisplay = setUpMediaProjection().createVirtualDisplay("screen-mirror",
+                metric.widthPixels,  metric.heightPixels, metric.densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
+                mImageReader.getSurface(), null, null);
+        SystemClock.sleep(500);
         Image image = mImageReader.acquireLatestImage();
         if (image == null) {
-            startScreenShot();
+            floatView.setVisibility(View.VISIBLE);
+            G.showToast("请稍候重新截图!");
+            LogUtil.println("FloatShotScreenService", "image");
         } else {
             Observable.just(image)
                     .map(new Func1<Image, Bitmap>() {
@@ -341,7 +334,6 @@ public class FloatShotScreenService extends Service {
                         public void call(Bitmap bitmap) {
                             //预览图片
                             if (bitmap != null) {
-                                DataUtil.getInstance().putData(Bitmap.class.getSimpleName(), bitmap);
                                 new GlobalScreenShot(getApplicationContext()).takeScreenshot(bitmap, new GlobalScreenShot.onScreenShotListener() {
                                     @Override
                                     public void onStartShot() {
@@ -409,6 +401,9 @@ public class FloatShotScreenService extends Service {
 
     private Intent mResultData = null;
 
+    public void setResultData(Intent mResultData) {
+        this.mResultData = mResultData;
+    }
 
     private ImageReader mImageReader;
 
@@ -426,4 +421,94 @@ public class FloatShotScreenService extends Service {
         mVirtualDisplay.release();
         mVirtualDisplay = null;
     }
+
+    private class FloatGestureTouchListener extends GestureDetector.SimpleOnGestureListener {
+        int lastX, lastY;
+        int paramX, paramY;
+
+        /**
+         * onDown():刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
+         */
+        @Override
+        public boolean onDown(MotionEvent event) {
+            lastX = (int) event.getRawX();
+            lastY = (int) event.getRawY();
+            paramX = params.x;
+            paramY = params.y;
+            return true;
+        }
+
+        /**
+         * onShowPress():手指按在触摸屏上,它的时间范围:在按下起后,在长按之前
+         */
+        @Override
+        public void onShowPress(MotionEvent e) {
+
+        }
+
+        /**
+         * onScroll():手指在屏幕上滑动
+         */
+        @Override
+        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
+            int dx = (int) e2.getRawX() - lastX;
+            int dy = (int) e2.getRawY() - lastY;
+            params.x = paramX + dx;
+            params.y = paramY + dy;
+            // 更新悬浮窗位置
+            windowManager.updateViewLayout(floatView, params);
+            return true;
+        }
+
+        /**
+         * onFling():手指在触摸屏上迅速移动,并松开的动作(滑动的比onScroll快)
+         */
+        @Override
+        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
+            return false;
+        }
+
+        /**
+         * onLongPress():手指在屏幕上停留一段时间 后抬起
+         */
+        @Override
+        public void onLongPress(MotionEvent e) {
+
+        }
+
+        /**
+         * onSingleTapUp():手指离开view那一瞬间执行
+         */
+        @Override
+        public boolean onSingleTapUp(MotionEvent e) {
+            return super.onSingleTapUp(e);
+        }
+
+        /**
+         * onSingleTapConfirmed() 同上者,但有附加条件,就是Android会确保单击之后短时间内没有再次单击,才会触发该函数。
+         * 举个列子,如果监听双击事件:onSingleTapUp()会被触发两次。但是onSingleTapConfirmed()一次都不会被触发。
+         * 所以,如果你既想监听单击事件,又想监听双击时间,那么请使用onSingleTapConfirmed()函数。
+         */
+        @Override
+        public boolean onSingleTapConfirmed(MotionEvent e) {
+            performClick();
+            return true;
+        }
+
+        /**
+         * 通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);双击的第二下Touch down和up都会触发,可用e.getAction()区分
+         */
+        @Override
+        public boolean onDoubleTapEvent(MotionEvent e) {
+            return super.onDoubleTapEvent(e);
+        }
+
+        /**
+         * 在双击的第二下,Touch down时触发
+         */
+        @Override
+        public boolean onDoubleTap(MotionEvent e) {
+            return super.onDoubleTap(e);
+        }
+    }
 }

+ 11 - 13
app/src/main/java/com/sheep/jiuyan/samllsheep/utils/TitleBarUtils.java

@@ -2,6 +2,7 @@ package com.sheep.jiuyan.samllsheep.utils;
 
 import android.app.Activity;
 import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.DrawableRes;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageButton;
@@ -206,7 +207,7 @@ public class TitleBarUtils {
      * @param backgroundImgResId 设置背景的ResID,为零透明,-1不变,-2为Gone,其它是资源
      * @param onClickListener    点击时的操作。
      */
-    public void setRightImgBotton(Activity activity, int backgroundImgResId, View.OnClickListener onClickListener) {
+    public TitleBarUtils setRightImgBotton(Activity activity, int backgroundImgResId, View.OnClickListener onClickListener) {
         Button button = activity.findViewById(R.id.btn_baseactivity_right);
         ImageButton imageButton = activity.findViewById(R.id.ibtn_baseactivity_right);
         if(button != null)
@@ -216,13 +217,14 @@ public class TitleBarUtils {
             imageButton.setImageDrawable(new ColorDrawable(0x00000000));
         } else if (backgroundImgResId == -2) {
             imageButton.setVisibility(View.GONE);
-            return;
+            return this;
         } else if (backgroundImgResId != -1) {
             imageButton.setImageResource(backgroundImgResId);
         }
         if (onClickListener != null) {
             imageButton.setOnClickListener(onClickListener);
         }
+        return this;
     }
     /**
      * 设置最右边的普通按钮状态
@@ -346,19 +348,15 @@ public class TitleBarUtils {
     }
 
     /**
-     * 右边两个按钮的情况
+     * 设置 从右边数,第两个按钮
      */
-    public TitleBarUtils setShowRightTwoBtn(Activity activity, int oneRes, int secondeRes, View.OnClickListener oneOnclick, View.OnClickListener twoOnclick){
-        ImageButton ibtn_two_right = activity.findViewById(R.id.ibtn_two_right);
-        ImageButton ibtn_baseactivity_right = activity.findViewById(R.id.ibtn_baseactivity_right);
+    public TitleBarUtils setRightSecondBtn(Activity activity, @DrawableRes int secondRes, View.OnClickListener secondOnclick){
+        ImageButton secondImageButton = activity.findViewById(R.id.ibtn_two_right);
 
-        ibtn_two_right.setVisibility(View.VISIBLE);
-        ibtn_baseactivity_right.setVisibility(View.VISIBLE);
-        ibtn_two_right.setImageResource(secondeRes);
-        ibtn_baseactivity_right.setImageResource(oneRes);
+        secondImageButton.setVisibility(View.VISIBLE);
+        secondImageButton.setImageResource(secondRes);
 
-        ibtn_two_right.setOnClickListener(twoOnclick);
-        ibtn_baseactivity_right.setOnClickListener(oneOnclick);
-        return mTitleBarUtils;
+        secondImageButton.setOnClickListener(secondOnclick);
+        return this;
     }
 }

+ 5 - 2
app/src/main/res/drawable/shape_green_stroke_rectangle.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-    <corners android:radius="10dp" />
+    <corners
+        android:topLeftRadius="10dp"
+        android:topRightRadius="10dp"
+        android:bottomRightRadius="10dp"/>
     <stroke
         android:width="1dp"
-        android:color="#F81B5F" />
+        android:color="#4889FF" />
 </shape>

+ 5 - 2
app/src/main/res/drawable/shape_red_stroke_rectangle.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-    <corners android:radius="10dp" />
+    <corners
+        android:topLeftRadius="10dp"
+        android:topRightRadius="10dp"
+        android:bottomRightRadius="10dp"/>
     <stroke
         android:width="1dp"
-        android:color="#2FA255" />
+        android:color="#FD2D54" />
 </shape>

+ 0 - 8
app/src/main/res/drawable/shape_yellow_stroke_rectangle.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <corners android:radius="10dp" />
-    <stroke
-        android:width="1dp"
-        android:color="#FFA21C" />
-</shape>

+ 14 - 0
app/src/main/res/layout/act_middle_screen_shot.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:padding="@dimen/dp_10"
+        android:text="截图中"
+        android:textColor="@android:color/black"
+        android:textSize="20sp" />
+</merge>

+ 0 - 1
app/src/main/res/layout/find_reservation_item.xml

@@ -49,7 +49,6 @@
     <TextView
         android:id="@+id/find_information_game_bt2"
         style="@style/style_button_find2"
-        android:layout_width="100dp"
         android:text="立即预约"
         app:layout_constraintBottom_toBottomOf="@+id/find_information_game_icon"
         app:layout_constraintEnd_toEndOf="parent"

+ 9 - 0
app/src/main/res/layout/try_makemoney_item_recommend.xml

@@ -132,6 +132,15 @@
                     android:textColor="#cc8e8e8e"
                     android:textSize="10sp"
                     android:visibility="gone" />
+                <TextView
+                    android:id="@+id/item_num_tv2"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/content_padding"
+                    android:text=""
+                    android:textColor="#cc8e8e8e"
+                    android:textSize="10sp"
+                    android:visibility="gone" />
             </LinearLayout>
 
             <View

+ 0 - 11
build.gradle

@@ -7,18 +7,12 @@ buildscript {
     repositories {
         jcenter()
         google()
-        //引入当前工程本地repo下面的aop插件
-        maven{
-            url uri("/repo")
-        }
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:2.3.3'
         classpath 'com.jakewharton:butterknife-gradle-plugin:+'
         classpath 'com.neenbedankt.gradle.plugins:android-apt:+'
         classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
-        //引入aop插件
-        classpath 'com.aop.plugin:aop-plugin:1.0.0'
         //aria使用本地library时添加的
         classpath 'com.novoda:bintray-release:0.5.0'
 //        classpath 'com.didi.virtualapk:gradle:0.9.1'
@@ -59,11 +53,6 @@ ext{
              */
             versionCode_app:1,
             versionName_app:"1.0",
-            /**
-             * kfzslibrary-module
-             */
-            versionCode_kfzslibrary:1,
-            versionName_kfzslibrary:"1.0",
 
     ]
 

+ 0 - 1
kfzslibrary/.gitignore

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

+ 0 - 58
kfzslibrary/build.gradle

@@ -1,58 +0,0 @@
-apply plugin: 'com.android.library'
-//使用aop插件
-apply plugin: 'com.aop.plugin'
-
-android {
-    compileSdkVersion androidConfigs.compileSdkVersion
-    buildToolsVersion androidConfigs.buildToolsVersion
-    defaultConfig {
-        minSdkVersion androidConfigs.minSdkVersion
-        targetSdkVersion androidConfigs.targetSdkVersion
-        versionCode androidConfigs.versionCode_kfzslibrary
-        versionName androidConfigs.versionName_kfzslibrary
-
-        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
-    }
-
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
-        }
-    }
-
-}
-
-dependencies {
-//    compile fileTree(dir: 'libs', include: ['*.jar'])
-    /**
-     * Test
-     */
-    testCompile 'junit:junit:4.12'
-    /**
-     * surport
-     */
-    compile dependenciesLibs.recyclerview
-    compile dependenciesLibs.support_appcompat_v7
-    compile dependenciesLibs.recyclerview
-    /**
-     * dagger
-     */
-    provided dependenciesLibs.javax_annotation
-    compile dependenciesLibs.dagger
-    annotationProcessor dependenciesLibs.dagger_compiler
-    /**
-     * Retrofit-RxJava-Gson
-     */
-    compile dependenciesLibs.retrofit2
-    compile dependenciesLibs.retrofit2_converter_gson
-    compile dependenciesLibs.okhttp3_logging_interceptor
-    compile dependenciesLibs.rxandroid
-    compile dependenciesLibs.retrofit2_adapter_rxjava
-    compile dependenciesLibs.gson
-    /**
-     * butterknife
-     */
-    compile dependenciesLibs.butterknife
-    annotationProcessor dependenciesLibs.butterknife_compiler
-}

+ 0 - 21
kfzslibrary/proguard-rules.pro

@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 0 - 26
kfzslibrary/src/androidTest/java/com/kfzs/libs/ExampleInstrumentedTest.java

@@ -1,26 +0,0 @@
-package com.kfzs.libs;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-    @Test
-    public void useAppContext() throws Exception {
-        // Context of the app under test.
-        Context appContext = InstrumentationRegistry.getTargetContext();
-
-        assertEquals("com.kfzs.libs.test", appContext.getPackageName());
-    }
-}

+ 0 - 5
kfzslibrary/src/main/AndroidManifest.xml

@@ -1,5 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.kfzs.libs" >
-
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-</manifest>

+ 0 - 51
kfzslibrary/src/main/java/com/kfzs/libs/DaggerActivity.java

@@ -1,51 +0,0 @@
-package com.kfzs.libs;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-
-/**
- * Created by guoxin on 2018/3/29.
- */
-
-public abstract class DaggerActivity extends AppCompatActivity implements IDaggerMvp {
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setupDaggerComponent();
-        onAttachedView();
-    }
-
-    @Override
-    protected void onDestroy() {
-        onDetachedView();
-        super.onDestroy();
-    }
-
-    @Override
-    public void onAttachedView() {
-        IPresenter presenter = currentPresenter();
-        if (presenter != null) {
-            presenter.attachedView(currentIView());
-        }
-    }
-
-    @Override
-    public void onDetachedView() {
-        IPresenter presenter = currentPresenter();
-        if (presenter != null) {
-            presenter.detachedView();
-        }
-    }
-
-
-    @Override
-    public boolean isActive() {
-        return currentIView() != null;
-    }
-
-    public abstract IPresenter currentPresenter();
-    public abstract IView currentIView();
-
-}

+ 0 - 61
kfzslibrary/src/main/java/com/kfzs/libs/DaggerFragment.java

@@ -1,61 +0,0 @@
-package com.kfzs.libs;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import com.kfzs.libs.widget.loading.SupportLoadingFragment;
-
-/**
- * Created by guoxin on 2018/3/30.
- */
-
-public abstract class DaggerFragment extends SupportLoadingFragment implements IDaggerMvp{
-
-    @Override
-    public void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setupDaggerComponent();
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        onAttachedView();
-    }
-
-    @Override
-    public void onDestroyView() {
-        super.onDestroyView();
-        onDetachedView();
-    }
-
-    @Override
-    public void onAttachedView() {
-        IPresenter presenter = currentPresenter();
-        if (presenter != null) {
-            presenter.attachedView(currentIView());
-        }
-    }
-
-    @Override
-    public void onDetachedView() {
-        IPresenter presenter = currentPresenter();
-        if (presenter != null) {
-            presenter.detachedView();
-        }
-    }
-    protected long startTime;
-    public void init() {
-        startTime = System.currentTimeMillis();
-    }
-
-    @Override
-    public boolean isActive() {
-        return isAdded();
-    }
-
-
-    public abstract IPresenter currentPresenter();
-    public abstract IView currentIView();
-
-
-}

+ 0 - 13
kfzslibrary/src/main/java/com/kfzs/libs/IDaggerMvp.java

@@ -1,13 +0,0 @@
-package com.kfzs.libs;
-
-/**
- * Created by guoxin on 2018/3/29.
- * Dagger+MVP架构,View层需要实现的接口
- */
-
-public interface IDaggerMvp {
-    void setupDaggerComponent();
-    void onAttachedView();
-    void onDetachedView();
-    boolean isActive();
-}

+ 0 - 12
kfzslibrary/src/main/java/com/kfzs/libs/IPresenter.java

@@ -1,12 +0,0 @@
-package com.kfzs.libs;
-
-/**
- * Created by guoxin on 2018/3/29.
- * MVP的Presenter层抽象控制接口
- */
-
-public interface IPresenter {
-    void attachedView(IView view);
-    void detachedView();
-    boolean isContactViewActive();
-}

+ 0 - 10
kfzslibrary/src/main/java/com/kfzs/libs/IView.java

@@ -1,10 +0,0 @@
-package com.kfzs.libs;
-
-/**
- * Created by guoxin on 2018/3/29.
- * MVP的View层抽象控制接口
- */
-
-public interface IView {
-    boolean isViewActive();
-}

+ 0 - 13
kfzslibrary/src/main/java/com/kfzs/libs/aop/Path.java

@@ -1,13 +0,0 @@
-package com.kfzs.libs.aop;
-
-/**
- * aop的路径配置,这里将代码迁移到其他包名的项目,只需要更改AOP_PKG字段,其余两个不需要更改
- * Created by Administrator on 2017/9/29 0029.
- */
-
-public class Path {
-    public static final String AOP_PKG = "org.gx.notes.aop";
-    public static final String AOP_POINTCUT_PREFIX = "execution(@";
-    public static final String AOP_POINTCUT_SUFFIX = " * *(..))";
-
-}

+ 0 - 15
kfzslibrary/src/main/java/com/kfzs/libs/aop/net/CheckNet.java

@@ -1,15 +0,0 @@
-package com.kfzs.libs.aop.net;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 在某个需要网络的业务方法上添加该注解,如果当前没有网络,就不会执行该方法内部的代码,而是提示没有网络
- * Created by Administrator on 2017/9/11 0011.
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface CheckNet {
-}

+ 0 - 96
kfzslibrary/src/main/java/com/kfzs/libs/aop/net/CheckNetAop.java

@@ -1,96 +0,0 @@
-package com.kfzs.libs.aop.net;
-
-import android.content.Context;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.widget.Toast;
-
-import com.kfzs.libs.aop.Path;
-import com.kfzs.libs.utils.ContextUtils;
-
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-
-/**
- * Created by Administrator on 2017/9/11 0011.
- */
-@Aspect
-class CheckNetAop {
-
-    /**
-     * 切入点注解的路径
-     */
-    public static final String ANNOTATION_PATH = Path.AOP_PKG + ".net.CheckNet";
-    /**
-     * 切入点值
-     */
-    public static final String POINTCUT =
-            Path.AOP_POINTCUT_PREFIX + ANNOTATION_PATH + Path.AOP_POINTCUT_SUFFIX;
-    /**
-     * 替换的方法
-     */
-    public static final String METHOD = "checkNet()";
-
-    @Pointcut(POINTCUT)
-    public void checkNet(){}
-
-    @Around(METHOD)
-    public Object checkNetEnvironment(ProceedingJoinPoint joinPoint) throws Throwable {
-
-        //先获取是否使用了注解CheckNet
-        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-        CheckNet checkNet = signature.getMethod().getAnnotation(CheckNet.class);
-        if(checkNet != null){
-            //使用了注解CheckNet,获取上下文,判断网络环境
-            Context context = ContextUtils.getContext(joinPoint.getThis());
-            if(context != null){
-                if(!isNetworkAvailable(context)){
-                    Toast.makeText(context,"网络进入二次元,请检查网络!",Toast.LENGTH_LONG).show();
-//                    new TopToastView.Builder(context)
-//                            .message("网络进入二次元,请检查网络!")
-//                            .bgColor("#ff0000")
-//                            .textColor("#ffffff")
-//                            .globalToastView(true)
-//                            .build()
-//                            .showToast();
-                    return null;
-                }
-            }
-        }
-
-        return joinPoint.proceed();
-    }
-
-
-
-    /**
-     * 检查当前网络是否可用
-     *
-     * @return
-     */
-    private static boolean isNetworkAvailable(Context context) {
-        // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
-        ConnectivityManager connectivityManager = (ConnectivityManager)
-                context.getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (connectivityManager != null) {
-            // 获取NetworkInfo对象
-            NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
-
-            if (networkInfo != null && networkInfo.length > 0) {
-                for (int i = 0; i < networkInfo.length; i++) {
-                    // 判断当前网络状态是否为连接状态
-                    if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-
-
-}

+ 0 - 35
kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/CheckPermission.java

@@ -1,35 +0,0 @@
-package com.kfzs.libs.aop.permission;
-
-import android.support.annotation.StringRes;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 执行某个方法时候,方法内部的代码需要某项权限,在该方法上加上该注解,就可以弹出请求权限的弹窗
- * Created by Administrator on 2017/9/12 0012.
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface CheckPermission {
-    /**
-     * 需要权限的数组
-     * @return
-     */
-    String[] permissions();
-
-    /**
-     * 如果拒绝了该权限,就会弹出该提示,让用户去开启
-     * @return
-     */
-    @StringRes int message();
-
-    /**
-     * 该值用来设置用户拒绝了权限之后,是否把当前界面关闭,通常可以用在启动页面,请求一些基本的权限,如果用户拒绝,就可以直接将启动页关闭
-     * 如果这里是启动页,拒绝权限后,这里没有添加杀死当前进程的字段,如有需求,可以重写添加
-     * @return
-     */
-    boolean finish();
-}

+ 0 - 116
kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/CheckPermissionAop.java

@@ -1,116 +0,0 @@
-package com.kfzs.libs.aop.permission;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.os.Build;
-
-import com.kfzs.libs.aop.Path;
-import com.kfzs.libs.utils.ContextUtils;
-import com.kfzs.libs.aop.permission.core.PermissionHelper;
-import com.kfzs.libs.aop.permission.core.RxPermissions;
-
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-
-
-import rx.functions.Action1;
-
-/**
- * Created by Administrator on 2017/9/12 0012.
- */
-@Aspect
-class CheckPermissionAop {
-
-    /**
-     * 切入点注解的路径
-     */
-    public static final String ANNOTATION_PATH = Path.AOP_PKG + ".permission.CheckPermission";
-    /**
-     * 切入点值
-     */
-    public static final String POINTCUT =
-            Path.AOP_POINTCUT_PREFIX + ANNOTATION_PATH + Path.AOP_POINTCUT_SUFFIX;
-    /**
-     * 替换的方法
-     */
-    public static final String METHOD = "check()";
-
-
-    @Pointcut(POINTCUT)
-    public void check(){}
-
-
-    @Around(METHOD)
-    public void checkPermission(final ProceedingJoinPoint joinPoint) throws Throwable {
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-            CheckPermission checkPermission = signature.getMethod().getAnnotation(CheckPermission.class);
-            String[] permissions = checkPermission.permissions();
-            final int msg = checkPermission.message();
-            final boolean finish = checkPermission.finish();
-            final Activity activity = (Activity) ContextUtils.getContext(joinPoint.getThis());
-            if(activity != null){
-                new RxPermissions(activity)
-                        .request(permissions)
-                        .subscribe(new Action1<Boolean>() {
-                            @Override
-                            public void call(Boolean granted) {
-                                if (!granted) {
-                                    // All requested permissions are granted
-                                    showDialog(activity,msg,finish);
-                                } else {
-                                    // At least one permission is denied
-                                    try {
-                                        joinPoint.proceed();
-                                    } catch (Throwable throwable) {
-                                        throwable.printStackTrace();
-                                    }
-                                }
-                            }
-                        });
-            }
-            else joinPoint.proceed();
-        }
-        else joinPoint.proceed();
-
-    }
-
-    private void showDialog(final Activity activity, int message, final boolean finish){
-
-        Resources resources = activity.getResources();
-        new AlertDialog.Builder(activity)
-                .setCancelable(false)
-                .setMessage(resources.getString(message))
-                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialogInterface, int i) {
-                        if(finish){
-                            activity.finish();
-                        }
-                    }
-                }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialogInterface, int i) {
-                        PermissionHelper.getAppDetailSettingIntent(activity);
-                        if(finish){
-                            activity.finish();
-                        }
-                    }
-        }).create().show();
-
-
-
-
-    }
-
-
-
-
-
-}

+ 0 - 48
kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/Permission.java

@@ -1,48 +0,0 @@
-package com.kfzs.libs.aop.permission.core;
-
-public class Permission {
-    public final String name;
-    public final boolean granted;
-    public final boolean shouldShowRequestPermissionRationale;
-
-    Permission(String name, boolean granted) {
-        this(name, granted, false);
-    }
-
-    Permission(String name, boolean granted, boolean shouldShowRequestPermissionRationale) {
-        this.name = name;
-        this.granted = granted;
-        this.shouldShowRequestPermissionRationale = shouldShowRequestPermissionRationale;
-    }
-
-    @Override
-    @SuppressWarnings("SimplifiableIfStatement")
-    public boolean equals(final Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final Permission that = (Permission) o;
-
-        if (granted != that.granted) return false;
-        if (shouldShowRequestPermissionRationale != that.shouldShowRequestPermissionRationale)
-            return false;
-        return name.equals(that.name);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = name.hashCode();
-        result = 31 * result + (granted ? 1 : 0);
-        result = 31 * result + (shouldShowRequestPermissionRationale ? 1 : 0);
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return "Permission{" +
-                "name='" + name + '\'' +
-                ", granted=" + granted +
-                ", shouldShowRequestPermissionRationale=" + shouldShowRequestPermissionRationale +
-                '}';
-    }
-}

+ 0 - 26
kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/PermissionHelper.java

@@ -1,26 +0,0 @@
-package com.kfzs.libs.aop.permission.core;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Build;
-
-/**
- * Created by Administrator on 2017/9/7 0007.
- */
-
-public class PermissionHelper {
-    public static void getAppDetailSettingIntent(Context context) {
-        Intent localIntent = new Intent();
-        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        if (Build.VERSION.SDK_INT >= 9) {
-            localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
-            localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
-        } else if (Build.VERSION.SDK_INT <= 8) {
-            localIntent.setAction(Intent.ACTION_VIEW);
-            localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
-            localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
-        }
-        context.startActivity(localIntent);
-    }
-}

+ 0 - 270
kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/RxPermissions.java

@@ -1,270 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kfzs.libs.aop.permission.core;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.app.FragmentManager;
-import android.os.Build;
-import android.support.annotation.NonNull;
-import android.text.TextUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import rx.Observable;
-import rx.functions.Func1;
-import rx.subjects.PublishSubject;
-
-public class RxPermissions {
-
-    static final String TAG = "RxPermissions";
-
-    RxPermissionsFragment mRxPermissionsFragment;
-
-    public RxPermissions(@NonNull Activity activity) {
-        mRxPermissionsFragment = getRxPermissionsFragment(activity);
-    }
-
-    private RxPermissionsFragment getRxPermissionsFragment(Activity activity) {
-        RxPermissionsFragment rxPermissionsFragment = findRxPermissionsFragment(activity);
-        boolean isNewInstance = rxPermissionsFragment == null;
-        if (isNewInstance) {
-            rxPermissionsFragment = new RxPermissionsFragment();
-            FragmentManager fragmentManager = activity.getFragmentManager();
-            fragmentManager
-                    .beginTransaction()
-                    .add(rxPermissionsFragment, TAG)
-                    .commitAllowingStateLoss();
-            fragmentManager.executePendingTransactions();
-        }
-
-        return rxPermissionsFragment;
-    }
-
-    private RxPermissionsFragment findRxPermissionsFragment(Activity activity) {
-        return (RxPermissionsFragment) activity.getFragmentManager().findFragmentByTag(TAG);
-    }
-
-    public void setLogging(boolean logging) {
-        mRxPermissionsFragment.setLogging(logging);
-    }
-
-    /**
-     * Map emitted items from the source observable into {@code true} if permissions in parameters
-     * are granted, or {@code false} if not.
-     * <p>
-     * If one or several permissions have never been requested, invoke the related framework method
-     * to ask the user if he allows the permissions.
-     */
-    @SuppressWarnings("WeakerAccess")
-    public Observable.Transformer<Object, Boolean> ensure(final String... permissions) {
-        return new Observable.Transformer<Object, Boolean>() {
-            @Override
-            public Observable<Boolean> call(Observable<Object> o) {
-                return request(o, permissions)
-                        // Transform Observable<Permission> to Observable<Boolean>
-                        .buffer(permissions.length)
-                        .flatMap(new Func1<List<Permission>, Observable<Boolean>>() {
-                            @Override
-                            public Observable<Boolean> call(List<Permission> permissions) {
-                                if (permissions.isEmpty()) {
-                                    // Occurs during orientation change, when the subject receives onComplete.
-                                    // In that case we don't want to propagate that empty list to the
-                                    // subscriber, only the onComplete.
-                                    return Observable.empty();
-                                }
-                                // Return true if all permissions are granted.
-                                for (Permission p : permissions) {
-                                    if (!p.granted) {
-                                        return Observable.just(false);
-                                    }
-                                }
-                                return Observable.just(true);
-                            }
-                        });
-            }
-        };
-    }
-
-    /**
-     * Map emitted items from the source observable into {@link Permission} objects for each
-     * permission in parameters.
-     * <p>
-     * If one or several permissions have never been requested, invoke the related framework method
-     * to ask the user if he allows the permissions.
-     */
-    @SuppressWarnings("WeakerAccess")
-    public Observable.Transformer<Object, Permission> ensureEach(final String... permissions) {
-        return new Observable.Transformer<Object, Permission>() {
-            @Override
-            public Observable<Permission> call(Observable<Object> o) {
-                return request(o, permissions);
-            }
-        };
-    }
-
-    /**
-     * Request permissions immediately, <b>must be invoked during initialization phase
-     * of your application</b>.
-     */
-    @SuppressWarnings({"WeakerAccess", "unused"})
-    public Observable<Boolean> request(final String... permissions) {
-        return Observable.just(null).compose(ensure(permissions));
-    }
-
-    /**
-     * Request permissions immediately, <b>must be invoked during initialization phase
-     * of your application</b>.
-     */
-    @SuppressWarnings({"WeakerAccess", "unused"})
-    public Observable<Permission> requestEach(final String... permissions) {
-        return Observable.just(null).compose(ensureEach(permissions));
-    }
-
-    private Observable<Permission> request(final Observable<?> trigger, final String... permissions) {
-        if (permissions == null || permissions.length == 0) {
-            throw new IllegalArgumentException("RxPermissions.request/requestEach requires at least one input permission");
-        }
-        return oneOf(trigger, pending(permissions))
-                .flatMap(new Func1<Object, Observable<Permission>>() {
-                    @Override
-                    public Observable<Permission> call(Object o) {
-                        return requestImplementation(permissions);
-                    }
-                });
-    }
-
-    private Observable<?> pending(final String... permissions) {
-        for (String p : permissions) {
-            if (!mRxPermissionsFragment.containsByPermission(p)) {
-                return Observable.empty();
-            }
-        }
-        return Observable.just(null);
-    }
-
-    private Observable<?> oneOf(Observable<?> trigger, Observable<?> pending) {
-        if (trigger == null) {
-            return Observable.just(null);
-        }
-        return Observable.merge(trigger, pending);
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    private Observable<Permission> requestImplementation(final String... permissions) {
-        List<Observable<Permission>> list = new ArrayList<>(permissions.length);
-        List<String> unrequestedPermissions = new ArrayList<>();
-
-        // In case of multiple permissions, we create an Observable for each of them.
-        // At the end, the observables are combined to have a unique response.
-        for (String permission : permissions) {
-            mRxPermissionsFragment.log("Requesting permission " + permission);
-            if (isGranted(permission)) {
-                // Already granted, or not Android M
-                // Return a granted Permission object.
-                list.add(Observable.just(new Permission(permission, true, false)));
-                continue;
-            }
-
-            if (isRevoked(permission)) {
-                // Revoked by a policy, return a denied Permission object.
-                list.add(Observable.just(new Permission(permission, false, false)));
-                continue;
-            }
-
-            PublishSubject<Permission> subject = mRxPermissionsFragment.getSubjectByPermission(permission);
-            // Create a new subject if not exists
-            if (subject == null) {
-                unrequestedPermissions.add(permission);
-                subject = PublishSubject.create();
-                mRxPermissionsFragment.setSubjectForPermission(permission, subject);
-            }
-
-            list.add(subject);
-        }
-
-        if (!unrequestedPermissions.isEmpty()) {
-            String[] unrequestedPermissionsArray = unrequestedPermissions.toArray(new String[unrequestedPermissions.size()]);
-            requestPermissionsFromFragment(unrequestedPermissionsArray);
-        }
-        return Observable.concat(Observable.from(list));
-    }
-
-    /**
-     * Invokes Activity.shouldShowRequestPermissionRationale and wraps
-     * the returned value in an observable.
-     * <p>
-     * In case of multiple permissions, only emits true if
-     * Activity.shouldShowRequestPermissionRationale returned true for
-     * all revoked permissions.
-     * <p>
-     * You shouldn't call this method if all permissions have been granted.
-     * <p>
-     * For SDK &lt; 23, the observable will always emit false.
-     */
-    @SuppressWarnings("WeakerAccess")
-    public Observable<Boolean> shouldShowRequestPermissionRationale(final Activity activity, final String... permissions) {
-        if (!isMarshmallow()) {
-            return Observable.just(false);
-        }
-        return Observable.just(shouldShowRequestPermissionRationaleImplementation(activity, permissions));
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    private boolean shouldShowRequestPermissionRationaleImplementation(final Activity activity, final String... permissions) {
-        for (String p : permissions) {
-            if (!isGranted(p) && !activity.shouldShowRequestPermissionRationale(p)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    void requestPermissionsFromFragment(String[] permissions) {
-        mRxPermissionsFragment.log("requestPermissionsFromFragment " + TextUtils.join(", ", permissions));
-        mRxPermissionsFragment.requestPermissions(permissions);
-    }
-
-    /**
-     * Returns true if the permission is already granted.
-     * <p>
-     * Always true if SDK &lt; 23.
-     */
-    @SuppressWarnings("WeakerAccess")
-    public boolean isGranted(String permission) {
-        return !isMarshmallow() || mRxPermissionsFragment.isGranted(permission);
-    }
-
-    /**
-     * Returns true if the permission has been revoked by a policy.
-     * <p>
-     * Always false if SDK &lt; 23.
-     */
-    @SuppressWarnings("WeakerAccess")
-    public boolean isRevoked(String permission) {
-        return isMarshmallow() && mRxPermissionsFragment.isRevoked(permission);
-    }
-
-    boolean isMarshmallow() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
-    }
-
-    void onRequestPermissionsResult(String permissions[], int[] grantResults) {
-        mRxPermissionsFragment.onRequestPermissionsResult(permissions, grantResults, new boolean[permissions.length]);
-    }
-
-}

+ 0 - 103
kfzslibrary/src/main/java/com/kfzs/libs/aop/permission/core/RxPermissionsFragment.java

@@ -1,103 +0,0 @@
-package com.kfzs.libs.aop.permission.core;
-
-import android.annotation.TargetApi;
-import android.app.Fragment;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.util.Log;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import rx.subjects.PublishSubject;
-
-public class RxPermissionsFragment extends Fragment {
-
-    private static final int PERMISSIONS_REQUEST_CODE = 42;
-
-    // Contains all the current permission requests.
-    // Once granted or denied, they are removed from it.
-    private Map<String, PublishSubject<Permission>> mSubjects = new HashMap<>();
-    private boolean mLogging;
-
-    public RxPermissionsFragment() {
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setRetainInstance(true);
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    void requestPermissions(@NonNull String[] permissions) {
-        requestPermissions(permissions, PERMISSIONS_REQUEST_CODE);
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
-        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
-
-        if (requestCode != PERMISSIONS_REQUEST_CODE) return;
-
-        boolean[] shouldShowRequestPermissionRationale = new boolean[permissions.length];
-
-        for (int i = 0; i < permissions.length; i++) {
-            shouldShowRequestPermissionRationale[i] = shouldShowRequestPermissionRationale(permissions[i]);
-        }
-
-        onRequestPermissionsResult(permissions, grantResults, shouldShowRequestPermissionRationale);
-    }
-
-    void onRequestPermissionsResult(String permissions[], int[] grantResults, boolean[] shouldShowRequestPermissionRationale) {
-        for (int i = 0, size = permissions.length; i < size; i++) {
-            log("onRequestPermissionsResult  " + permissions[i]);
-            // Find the corresponding subject
-            PublishSubject<Permission> subject = mSubjects.get(permissions[i]);
-            if (subject == null) {
-                // No subject found
-                Log.e(RxPermissions.TAG, "RxPermissions.onRequestPermissionsResult invoked but didn't find the corresponding permission request.");
-                return;
-            }
-            mSubjects.remove(permissions[i]);
-            boolean granted = grantResults[i] == PackageManager.PERMISSION_GRANTED;
-            subject.onNext(new Permission(permissions[i], granted, shouldShowRequestPermissionRationale[i]));
-            subject.onCompleted();
-        }
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    boolean isGranted(String permission) {
-        return getActivity().checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    boolean isRevoked(String permission) {
-        return getActivity().getPackageManager().isPermissionRevokedByPolicy(permission, getActivity().getPackageName());
-    }
-
-    public void setLogging(boolean logging) {
-        mLogging = logging;
-    }
-
-    public PublishSubject<Permission> getSubjectByPermission(@NonNull String permission) {
-        return mSubjects.get(permission);
-    }
-
-    public boolean containsByPermission(@NonNull String permission) {
-        return mSubjects.containsKey(permission);
-    }
-
-    public PublishSubject<Permission> setSubjectForPermission(@NonNull String permission, @NonNull PublishSubject<Permission> subject) {
-        return mSubjects.put(permission, subject);
-    }
-
-    void log(String message) {
-        if (mLogging) {
-            Log.d(RxPermissions.TAG, message);
-        }
-    }
-
-}

+ 0 - 28
kfzslibrary/src/main/java/com/kfzs/libs/convert/HttpObservableTransformer.java

@@ -1,28 +0,0 @@
-package com.kfzs.libs.convert;
-
-import rx.Observable;
-import rx.Observer;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-
-/**
- * Created by guoxin on 2018/4/4.
- */
-
-public class HttpObservableTransformer implements Observable.Transformer{
-
-    private HttpObserver httpObserver;
-
-    public HttpObservableTransformer(HttpObserver httpObserver){
-        this.httpObserver = httpObserver;
-    }
-
-    @Override
-    public Object call(Object observable) {
-        return ((Observable) observable).subscribeOn(Schedulers.io())
-                .unsubscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(httpObserver);
-    }
-
-}

+ 0 - 26
kfzslibrary/src/main/java/com/kfzs/libs/convert/HttpObserver.java

@@ -1,26 +0,0 @@
-package com.kfzs.libs.convert;
-
-import rx.Observable;
-import rx.Observer;
-
-/**
- * Created by guoxin on 2018/4/4.
- */
-
-public class HttpObserver<T> implements Observer<T> {
-
-    @Override
-    public void onCompleted() {
-
-    }
-
-    @Override
-    public void onError(Throwable e) {
-
-    }
-
-    @Override
-    public void onNext(T t) {
-
-    }
-}

+ 0 - 17
kfzslibrary/src/main/java/com/kfzs/libs/convert/StringConverter.java

@@ -1,17 +0,0 @@
-package com.kfzs.libs.convert;
-
-import java.io.IOException;
-
-import okhttp3.ResponseBody;
-import retrofit2.Converter;
-
-/**
- * Created by ljy on 2018/3/8.
- */
-public class StringConverter implements Converter<ResponseBody, String> {
-
-    @Override
-    public String convert(ResponseBody value) throws IOException {
-        return value.string();
-    }
-}

+ 0 - 28
kfzslibrary/src/main/java/com/kfzs/libs/convert/StringConverterFactory.java

@@ -1,28 +0,0 @@
-package com.kfzs.libs.convert;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-import okhttp3.ResponseBody;
-import retrofit2.Converter;
-import retrofit2.Retrofit;
-
-/**
- * Created by guoxin on 2018/3/29.
- */
-
-public class StringConverterFactory extends Converter.Factory {
-
-    public static StringConverterFactory create(){
-        return new StringConverterFactory();
-    }
-
-    @Override
-    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
-        if (type == String.class) {
-            return new StringConverter();
-        }
-        //其它类型我们不处理,返回null就行
-        return null;
-    }
-}

+ 0 - 56
kfzslibrary/src/main/java/com/kfzs/libs/convert/TConverterFactory.java

@@ -1,56 +0,0 @@
-package com.kfzs.libs.convert;
-
-import com.google.gson.Gson;
-import com.google.gson.TypeAdapter;
-import com.google.gson.reflect.TypeToken;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-import okhttp3.ResponseBody;
-import retrofit2.Converter;
-import retrofit2.Retrofit;
-
-/**
- * Created by guoxin on 2018/4/4.
- */
-
-public class TConverterFactory extends Converter.Factory{
-
-
-    public static TConverterFactory create() {
-        return create(new Gson());
-    }
-
-    /**
-     * Create an instance using {@code gson} for conversion. Encoding to JSON and
-     * decoding from JSON (when no charset is specified by a header) will use UTF-8.
-     */
-    public static TConverterFactory create(Gson gson) {
-        return new TConverterFactory(gson);
-    }
-
-    private final Gson gson;
-
-    private TConverterFactory(Gson gson) {
-        if (gson == null) throw new NullPointerException("gson == null");
-        this.gson = gson;
-    }
-
-
-
-
-//    @Override
-//    public Converter<?, RequestBody> requestBodyConverter(Type type,
-//                                                          Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
-//        return new ApiRequestConverter<>();
-//    }
-
-    @Override
-    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
-                                                            Retrofit retrofit) {
-        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
-        return new TResponseConverter<>(gson, type);
-    }
-
-}

+ 0 - 97
kfzslibrary/src/main/java/com/kfzs/libs/convert/TResponseConverter.java

@@ -1,97 +0,0 @@
-package com.kfzs.libs.convert;
-
-import com.google.gson.Gson;
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import okhttp3.ResponseBody;
-import retrofit2.Converter;
-
-/**
- * Created by devil on 2016/9/18.
- */
-final class TResponseConverter<T> implements Converter<ResponseBody, T> {
-
-    private final Gson gson;
-    private final Type type;
-
-    TResponseConverter(Gson gson, Type type) {
-        this.gson = gson;
-        this.type = type;
-    }
-
-    @Override
-    public T convert(ResponseBody value) throws IOException {
-
-
-        //如果数据加密,这里可以先从ResponseBody中取出字符串,如:value.string();value.bytes();然后解密
-
-        try {
-            String response = value.string();
-            Class cls = getRawType(type);
-            if (cls.isAssignableFrom(String.class)) {
-                return (T) response;
-            }
-            else {
-                return (T) gson.fromJson(response,type);
-            }
-        }
-        finally {
-            value.close();
-        }
-
-    }
-
-    private Type getType() {
-        ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
-        Type entityClass = parameterizedType.getActualTypeArguments()[0];
-        return entityClass;
-    }
-
-    private Class<?> getRawType(Type type) {
-        if (type instanceof Class<?>) {
-            // type is a normal class.
-            return (Class<?>) type;
-
-        } else if (type instanceof ParameterizedType) {
-            ParameterizedType parameterizedType = (ParameterizedType) type;
-
-            // I'm not exactly sure why getRawType() returns Type instead of Class.
-            // Neal isn't either but suspects some pathological case related
-            // to nested classes exists.
-            Type rawType = parameterizedType.getRawType();
-            checkArgument(rawType instanceof Class);
-            return (Class<?>) rawType;
-
-        } else if (type instanceof GenericArrayType) {
-            Type componentType = ((GenericArrayType) type).getGenericComponentType();
-            return Array.newInstance(getRawType(componentType), 0).getClass();
-
-        } else if (type instanceof TypeVariable) {
-            // we could use the variable's bounds, but that won't work if there are multiple.
-            // having a raw type that's more general than necessary is okay
-            return Object.class;
-
-        } else if (type instanceof WildcardType) {
-            return getRawType(((WildcardType) type).getUpperBounds()[0]);
-
-        } else {
-            String className = type == null ? "null" : type.getClass().getName();
-            throw new IllegalArgumentException("Expected a Class, ParameterizedType, or "
-                    + "GenericArrayType, but <" + type + "> is of type " + className);
-        }
-    }
-
-    private void checkArgument(boolean condition) {
-        if (!condition) {
-            throw new IllegalArgumentException();
-        }
-    }
-
-}
-
-

+ 0 - 15
kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpComponent.java

@@ -1,15 +0,0 @@
-package com.kfzs.libs.di.http;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-/**
- * Created by guoxin on 2018/3/29.
- * Dagger实现的网络访问依赖注入中间件Component
- */
-@Component(modules = HttpModule.class)
-@Singleton
-public interface HttpComponent {
-    HttpService getHttpService();
-}

+ 0 - 67
kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpModule.java

@@ -1,67 +0,0 @@
-package com.kfzs.libs.di.http;
-
-
-import com.kfzs.libs.convert.StringConverterFactory;
-import com.kfzs.libs.convert.TConverterFactory;
-
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Singleton;
-
-import dagger.Module;
-import dagger.Provides;
-import okhttp3.OkHttpClient;
-import retrofit2.Retrofit;
-import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
-import retrofit2.converter.gson.GsonConverterFactory;
-
-/**
- * Created by guoxin on 2018/3/29.
- */
-@Module
-public class HttpModule {
-
-//    public static final String BASE_URL = "http://10.8.240.165:7011/";
-//    public static final String BASE_URL = "http://10.8.230.17:7011/";
-
-    public static final String BASE_URL = "http://credit.kfzs.com/";
-
-
-    public static final int CONNECT_TIMEOUT = 15;
-    public static final int READ_TIMEOUT = 15;
-
-    @Provides
-    @Singleton
-    public OkHttpClient provideOkHttpClient(){
-//        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
-//        loggingInterceptor.setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE);
-        OkHttpClient okhttpClient = new OkHttpClient.Builder()
-                .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
-                .readTimeout(READ_TIMEOUT,TimeUnit.SECONDS)
-//                .addInterceptor(new AddPuplicParameIntercept())
-//                .addInterceptor(loggingInterceptor)
-                .build();
-        return okhttpClient;
-    }
-
-    @Provides
-    @Singleton
-    public Retrofit provideRetrofit(OkHttpClient okHttpClient){
-        Retrofit retrofit = new Retrofit.Builder()
-                .client(okHttpClient)
-                .baseUrl(BASE_URL)
-                .addConverterFactory(StringConverterFactory.create())
-                .addConverterFactory(GsonConverterFactory.create())
-//                .addConverterFactory(TConverterFactory.create())
-                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
-                .build();
-        return retrofit;
-    }
-
-    @Provides
-    @Singleton
-    public HttpService provideHttpService(Retrofit retrofit){
-        return retrofit.create(HttpService.class);
-    }
-
-}

+ 0 - 14
kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpScope.java

@@ -1,14 +0,0 @@
-package com.kfzs.libs.di.http;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-import javax.inject.Scope;
-
-/**
- * Created by guoxin on 2018/3/29.
- */
-@Scope
-@Retention(RetentionPolicy.RUNTIME)
-public @interface HttpScope {
-}

+ 0 - 69
kfzslibrary/src/main/java/com/kfzs/libs/di/http/HttpService.java

@@ -1,69 +0,0 @@
-package com.kfzs.libs.di.http;
-
-
-import java.io.File;
-import java.util.Map;
-
-import retrofit2.Call;
-import retrofit2.http.FieldMap;
-import retrofit2.http.FormUrlEncoded;
-import retrofit2.http.GET;
-import retrofit2.http.POST;
-import rx.Observable;
-
-/**
- * Created by guoxin on 2018/3/29.
- */
-
-public interface HttpService {
-
-    //表格形式发送
-    @FormUrlEncoded
-    @POST("credits/cmbc/log")
-    Observable<String> commitCreditCardFiled(@FieldMap Map<String, String> map);
-
-    //表格形式发送
-    @FormUrlEncoded
-    @POST("credits/cmbc/basic")
-    Observable<String> commitCreditCardBasic(@FieldMap Map<String, String> map);
-    //表格形式发送
-    @FormUrlEncoded
-    @POST("credits/cmbc/code")
-    Observable<String> getCreditCardDynamic(@FieldMap Map<String, String> map);
-
-    //表格形式发送
-    @FormUrlEncoded
-    @POST("credits/cmbc/extend")
-    Observable<String> commitCreditCardDetails(@FieldMap Map<String, String> map);
-    //表格形式发送
-
-    @FormUrlEncoded
-    @POST("credits/cmbc/modify")
-    Observable<String> commitCreditCardModify(@FieldMap Map<String, String> map);
-
-    //表格形式发送
-    @FormUrlEncoded
-    @POST("credits/ecitic/code")
-    Observable<String> commitCreditCardZXCode(@FieldMap Map<String, String> map);
-
-    @POST("credits/ecitic/img_code")
-    Observable<String> commitCreditCardZXImageCode();
-
-    @FormUrlEncoded
-    @POST("credits/ecitic/company")
-    Observable<String> zxCompany(@FieldMap Map<String, String> map);
-
-    @FormUrlEncoded
-    @POST("credits/ecitic/contact")
-    Observable<String> zxContact(@FieldMap Map<String, String> map);
-
-    @FormUrlEncoded
-    @POST("credits/ecitic/relative")
-    Observable<String> zxRelative(@FieldMap Map<String, String> map);
-
-    @FormUrlEncoded
-    @POST("credits/ecitic/basic")
-    Observable<String> zxBasic(@FieldMap Map<String, String> map);
-
-
-}

+ 0 - 93
kfzslibrary/src/main/java/com/kfzs/libs/dialog/BaseDialogFragment.java

@@ -1,93 +0,0 @@
-package com.kfzs.libs.dialog;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.Context;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AlertDialog;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
-
-import butterknife.ButterKnife;
-
-/**
- * 使用DialogFragment创建Dialog的快捷基础类
- * Created by Administrator on 2018/2/11 0011.
- */
-
-public abstract class BaseDialogFragment extends DialogFragment {
-
-    /**
-     * 没有设置dialog的弹出动画,这个是默认值
-     */
-    private static final int NO_SET_ANIMATION = -1;
-
-    protected Activity activity;
-
-    @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-        activity = (Activity) context;
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        View contentView = LayoutInflater.from(activity).inflate(dialogContentViewLayoutId(), null);
-        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
-        AlertDialog dialog = builder.show();
-        Window window = dialog.getWindow();
-        if (window != null) {
-            window.setContentView(contentView);
-            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
-            window.setLayout(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
-            window.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
-            if(windowAnimationStyle() != NO_SET_ANIMATION){
-                window.setWindowAnimations(windowAnimationStyle());
-            }
-            windowOtherSettings(window);
-        }
-        ButterKnife.bind(this, contentView);
-        setupContentView();
-        return dialog;
-    }
-
-    /**
-     * 关于Window的其他配置
-     * @param window
-     */
-    public void windowOtherSettings(Window window){
-
-    }
-
-    /**
-     * @return dialog的布局文件id
-     */
-    public abstract @LayoutRes
-    int dialogContentViewLayoutId();
-
-    /**
-     * 初始化dialog的控件,这里绑定了ButterKnife,直接使用@BindView
-     */
-    public abstract void setupContentView();
-
-    /**
-     * 重写该方法,可以修改dialog的弹出动画
-     * 比如 :
-     * <style name="BottomSheetDialogStyle">
-     *     <item name="android:windowEnterAnimation">@anim/bottom_sheet_enter</item>
-     *     <item name="android:windowExitAnimation">@anim/bottom_sheet_exit</item>
-     * </style>
-     * @return 返回dialog弹出动画的style
-     */
-    protected int windowAnimationStyle(){
-        return NO_SET_ANIMATION;
-    }
-
-
-}

+ 0 - 37
kfzslibrary/src/main/java/com/kfzs/libs/utils/ContextUtils.java

@@ -1,37 +0,0 @@
-package com.kfzs.libs.utils;
-
-import android.app.Activity;
-import android.content.Context;
-import android.support.v4.app.Fragment;
-import android.view.View;
-
-/**
- * Created by Administrator on 2017/9/28 0028.
- */
-
-public class ContextUtils {
-
-    /**
-     * 通过对象获取上下文
-     *
-     * @param object
-     * @return
-     */
-    public static Context getContext(Object object) {
-        if (object instanceof Activity) {
-            return (Activity) object;
-        } else if (object instanceof Fragment) {
-            Fragment fragment = (Fragment) object;
-            return fragment.getActivity();
-        } else if (object instanceof android.app.Fragment) {
-            android.app.Fragment fragment = (android.app.Fragment) object;
-            return fragment.getActivity();
-        }
-        else if (object instanceof View) {
-            View view = (View) object;
-            return view.getContext();
-        }
-        return null;
-    }
-
-}

+ 0 - 231
kfzslibrary/src/main/java/com/kfzs/libs/utils/DeviceHelper.java

@@ -1,231 +0,0 @@
-package com.kfzs.libs.utils;
-
-/**
- * Created by guoxin on 2018/3/30.
- */
-
-import android.annotation.TargetApi;
-import android.app.AppOpsManager;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.os.Binder;
-import android.os.Build;
-import android.os.Environment;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import java.io.File;
-import java.io.FileInputStream;
-import java.lang.reflect.Method;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-public class DeviceHelper {
-    private final static String TAG = "DeviceHelper";
-    private final static String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
-    private static final String KEY_FLYME_VERSION_NAME = "ro.build.display.id";
-    private final static String FLYME = "flyme";
-    private final static String ZTEC2016 = "zte c2016";
-    private final static String ZUKZ1 = "zuk z1";
-    private final static String MEIZUBOARD[] = {"m9", "M9", "mx", "MX"};
-    private static String sMiuiVersionName;
-    private static String sFlymeVersionName;
-    private static boolean sIsTabletChecked = false;
-    private static boolean sIsTabletValue = false;
-
-    static {
-        FileInputStream fileInputStream = null;
-        try {
-            fileInputStream = new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"));
-            Properties properties = new Properties();
-            properties.load(fileInputStream);
-            Class<?> clzSystemProperties = Class.forName("android.os.SystemProperties");
-            Method getMethod = clzSystemProperties.getDeclaredMethod("get", String.class);
-            // miui
-            sMiuiVersionName =getLowerCaseName(properties, getMethod, KEY_MIUI_VERSION_NAME);
-            //flyme
-            sFlymeVersionName = getLowerCaseName(properties, getMethod, KEY_FLYME_VERSION_NAME);
-
-        } catch (Exception e) {
-//            QMUILog.printErrStackTrace(TAG, e, "getProperty error");
-        } finally {
-            LangHelper.close(fileInputStream);
-        }
-    }
-
-    private static boolean _isTablet(Context context) {
-        return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >=
-                Configuration.SCREENLAYOUT_SIZE_LARGE;
-    }
-
-    /**
-     * 判断是否为平板设备
-     */
-    public static boolean isTablet(Context context) {
-        if (sIsTabletChecked) {
-            return sIsTabletValue;
-        }
-        sIsTabletValue = _isTablet(context);
-        sIsTabletChecked = true;
-        return sIsTabletValue;
-    }
-
-    /**
-     * 判断是否是flyme系统
-     */
-    public static boolean isFlyme() {
-        return !TextUtils.isEmpty(sFlymeVersionName) && sFlymeVersionName.contains(FLYME);
-    }
-
-    /**
-     * 判断是否是MIUI系统
-     */
-    public static boolean isMIUI() {
-        return !TextUtils.isEmpty(sMiuiVersionName);
-    }
-
-    public static boolean isMIUIV5() {
-        return "v5".equals(sMiuiVersionName);
-    }
-
-    public static boolean isMIUIV6() {
-        return "v6".equals(sMiuiVersionName);
-    }
-
-    public static boolean isMIUIV7() {
-        return "v7".equals(sMiuiVersionName);
-    }
-
-    public static boolean isMIUIV8() {
-        return "v8".equals(sMiuiVersionName);
-    }
-
-    public static boolean isMIUIV9() {
-        return "v9".equals(sMiuiVersionName);
-    }
-
-    public static boolean isFlymeVersionHigher5_2_4() {
-        //查不到默认高于5.2.4
-        boolean isHigher = true;
-        if(sFlymeVersionName != null && !sFlymeVersionName.equals("")){
-            Pattern pattern = Pattern.compile("(\\d+\\.){2}\\d");
-            Matcher matcher = pattern.matcher(sFlymeVersionName);
-            if (matcher.find()) {
-                String versionString = matcher.group();
-                if (versionString != null && !versionString.equals("")) {
-                    String[] version = versionString.split("\\.");
-                    if (version.length == 3) {
-                        if (Integer.valueOf(version[0]) < 5) {
-                            isHigher = false;
-                        } else if (Integer.valueOf(version[0]) > 5) {
-                            isHigher = true;
-                        } else {
-                            if (Integer.valueOf(version[1]) < 2) {
-                                isHigher = false;
-                            } else if (Integer.valueOf(version[1]) > 2) {
-                                isHigher = true;
-                            } else {
-                                if (Integer.valueOf(version[2]) < 4) {
-                                    isHigher = false;
-                                } else if (Integer.valueOf(version[2]) >= 5) {
-                                    isHigher = true;
-                                }
-                            }
-                        }
-                    }
-
-                }
-            }
-        }
-        return isMeizu() && isHigher;
-    }
-
-    /**
-     * 判断是否为魅族
-     */
-    public static boolean isMeizu() {
-        return isPhone(MEIZUBOARD) || isFlyme();
-    }
-
-    /**
-     * 判断是否为小米
-     */
-    public static boolean isXiaomi() {
-        return Build.BRAND.toLowerCase().contains("xiaomi");
-    }
-
-
-    /**
-     * 判断是否为 ZUK Z1 和 ZTK C2016。
-     * 两台设备的系统虽然为 android 6.0,但不支持状态栏icon颜色改变,因此经常需要对它们进行额外判断。
-     */
-    public static boolean isZUKZ1() {
-        final String board = Build.MODEL;
-        return board != null && board.toLowerCase().contains(ZUKZ1);
-    }
-
-    public static boolean isZTKC2016() {
-        final String board = Build.MODEL;
-        return board != null && board.toLowerCase().contains(ZTEC2016);
-    }
-
-    private static boolean isPhone(String[] boards) {
-        final String board = Build.BOARD;
-        if (board == null) {
-            return false;
-        }
-        for (String board1 : boards) {
-            if (board.equals(board1)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 判断悬浮窗权限(目前主要用户魅族与小米的检测)。
-     */
-    public static boolean isFloatWindowOpAllowed(Context context) {
-        final int version = Build.VERSION.SDK_INT;
-        if (version >= 19) {
-            return checkOp(context, 24);  // 24 是AppOpsManager.OP_SYSTEM_ALERT_WINDOW 的值,该值无法直接访问
-        } else {
-            try {
-                return (context.getApplicationInfo().flags & 1 << 27) == 1 << 27;
-            } catch (Exception e) {
-                e.printStackTrace();
-                return false;
-            }
-        }
-    }
-
-    @TargetApi(19)
-    private static boolean checkOp(Context context, int op) {
-        final int version = Build.VERSION.SDK_INT;
-        if (version >= Build.VERSION_CODES.KITKAT) {
-            AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
-            try {
-                Method method = manager.getClass().getDeclaredMethod("checkOp", int.class, int.class, String.class);
-                int property = (Integer) method.invoke(manager, op,
-                        Binder.getCallingUid(), context.getPackageName());
-                return AppOpsManager.MODE_ALLOWED == property;
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return false;
-    }
-
-    @Nullable
-    private static String getLowerCaseName(Properties p, Method get, String key) {
-        String name = p.getProperty(key);
-        if (name == null) {
-            try {
-                name = (String) get.invoke(null, key);
-            } catch (Exception ignored) {}
-        }
-        if (name != null) name = name.toLowerCase();
-        return name;
-    }
-}

+ 0 - 326
kfzslibrary/src/main/java/com/kfzs/libs/utils/DisplayHelper.java

@@ -1,326 +0,0 @@
-package com.kfzs.libs.utils;
-
-/**
- * Created by guoxin on 2018/3/30.
- */
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Point;
-import android.net.ConnectivityManager;
-import android.os.Build;
-import android.os.Environment;
-import android.util.DisplayMetrics;
-import android.util.TypedValue;
-import android.view.Display;
-import android.view.ViewConfiguration;
-import android.view.WindowManager;
-
-import java.lang.reflect.Field;
-import java.util.Locale;
-
-
-public class DisplayHelper {
-
-    /**
-     * 屏幕密度,系统源码注释不推荐使用
-     */
-    public static final float DENSITY = Resources.getSystem()
-            .getDisplayMetrics().density;
-    private static final String TAG = "Devices";
-    /**
-     * 屏幕密度
-     */
-    public static float sDensity = 0f;
-    /**
-     * 是否有摄像头
-     */
-    private static Boolean sHasCamera = null;
-
-    /**
-     * 获取 DisplayMetrics
-     */
-    public static DisplayMetrics getDisplayMetrics(Context context) {
-        DisplayMetrics displayMetrics = new DisplayMetrics();
-        ((WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE))
-                .getDefaultDisplay().getMetrics(displayMetrics);
-        return displayMetrics;
-    }
-
-    /**
-     * 把以 dp 为单位的值,转化为以 px 为单位的值
-     *
-     * @param dpValue 以 dp 为单位的值
-     * @return px value
-     */
-    public static int dpToPx(int dpValue) {
-        return (int) (dpValue * DENSITY + 0.5f);
-    }
-
-    /**
-     * 把以 px 为单位的值,转化为以 dp 为单位的值
-     *
-     * @param pxValue 以 px 为单位的值
-     * @return dp值
-     */
-    public static int pxToDp(float pxValue) {
-        return (int) (pxValue / DENSITY + 0.5f);
-    }
-
-    public static float getDensity(Context context) {
-        if (sDensity == 0f) {
-            sDensity = getDisplayMetrics(context).density;
-        }
-        return sDensity;
-    }
-
-    /**
-     * 获取屏幕宽度
-     */
-    public static int getScreenWidth(Context context) {
-        return getDisplayMetrics(context).widthPixels;
-    }
-
-    /**
-     * 获取屏幕高度
-     */
-    public static int getScreenHeight(Context context) {
-        return getDisplayMetrics(context).heightPixels;
-    }
-
-    /**
-     * 获取屏幕的真实宽高
-     */
-    public static int[] getRealScreenSize(Context context) {
-        int[] size = new int[2];
-        int widthPixels, heightPixels;
-        WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-        Display d = w.getDefaultDisplay();
-        DisplayMetrics metrics = new DisplayMetrics();
-        d.getMetrics(metrics);
-        // since SDK_INT = 1;
-        widthPixels = metrics.widthPixels;
-        heightPixels = metrics.heightPixels;
-        try {
-            // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
-            widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
-            heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
-        } catch (Exception ignored) {
-        }
-        try {
-            // used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
-            Point realSize = new Point();
-            Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
-            widthPixels = realSize.x;
-            heightPixels = realSize.y;
-        } catch (Exception ignored) {
-        }
-
-        size[0] = widthPixels;
-        size[1] = heightPixels;
-        return size;
-
-    }
-
-    /**
-     * 单位转换: dp -> px
-     */
-    public static int dp2px(Context context, int dp) {
-        return (int) (getDensity(context) * dp + 0.5);
-    }
-
-    /**
-     * 单位转换:px -> dp
-     */
-    public static int px2dp(Context context, int px) {
-        return (int) (px / getDensity(context) + 0.5);
-    }
-
-    /**
-     * 判断是否有状态栏
-     */
-    public static boolean hasStatusBar(Context context) {
-        if (context instanceof Activity) {
-            Activity activity = (Activity) context;
-            WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
-            return (attrs.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != WindowManager.LayoutParams.FLAG_FULLSCREEN;
-        }
-        return true;
-    }
-
-    /**
-     * 获取ActionBar高度
-     */
-    public static int getActionBarHeight(Context context) {
-        int actionBarHeight = 0;
-        TypedValue tv = new TypedValue();
-        if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
-            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
-                    context.getResources().getDisplayMetrics());
-        }
-        return actionBarHeight;
-    }
-
-    /**
-     * 获取状态栏高度
-     */
-    public static int getStatusBarHeight(Context context) {
-        Class<?> c;
-        Object obj;
-        Field field;
-        int x;
-        try {
-            c = Class.forName("com.android.internal.R$dimen");
-            obj = c.newInstance();
-            field = c.getField("status_bar_height");
-            x = Integer.parseInt(field.get(obj).toString());
-            return context.getResources()
-                    .getDimensionPixelSize(x);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return 0;
-    }
-
-    /**
-     * 获取虚拟菜单的高度,若无则返回0
-     */
-    public static int getNavMenuHeight(Context context) {
-        return getRealScreenSize(context)[1] - getScreenHeight(context);
-    }
-
-    public static boolean hasCamera(Context context) {
-        if (sHasCamera == null) {
-            PackageManager pckMgr = context.getPackageManager();
-            boolean flag = pckMgr
-                    .hasSystemFeature("android.hardware.camera.front");
-            boolean flag1 = pckMgr.hasSystemFeature("android.hardware.camera");
-            boolean flag2;
-            flag2 = flag || flag1;
-            sHasCamera = flag2;
-        }
-        return sHasCamera;
-    }
-
-    /**
-     * 是否有硬件menu
-     */
-    @SuppressWarnings("SimplifiableIfStatement")
-    public static boolean hasHardwareMenuKey(Context context) {
-        boolean flag;
-        if (Build.VERSION.SDK_INT < 11)
-            flag = true;
-        else if (Build.VERSION.SDK_INT >= 14) {
-            flag = ViewConfiguration.get(context).hasPermanentMenuKey();
-        } else
-            flag = false;
-        return flag;
-    }
-
-    /**
-     * 是否有网络功能
-     */
-    public static boolean hasInternet(Context context) {
-        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-        return cm.getActiveNetworkInfo() != null;
-    }
-
-    /**
-     * 判断是否存在pckName包
-     */
-    public static boolean isPackageExist(Context context, String pckName) {
-        try {
-            PackageInfo pckInfo = context.getPackageManager()
-                    .getPackageInfo(pckName, 0);
-            if (pckInfo != null)
-                return true;
-        } catch (PackageManager.NameNotFoundException ignored) {
-        }
-        return false;
-    }
-
-    /**
-     * 判断 SD Card 是否 ready
-     */
-    public static boolean isSdcardReady() {
-        return Environment.MEDIA_MOUNTED.equals(Environment
-                .getExternalStorageState());
-    }
-
-    /**
-     * 获取当前国家的语言
-     */
-    public static String getCurCountryLan(Context context) {
-        Configuration config = context.getResources().getConfiguration();
-        Locale sysLocale;
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-            sysLocale = config.getLocales().get(0);
-        } else {
-            //noinspection deprecation
-            sysLocale = config.locale;
-        }
-        return sysLocale.getLanguage()
-                + "-"
-                + sysLocale.getCountry();
-    }
-
-    /**
-     * 判断是否为中文环境
-     */
-    public static boolean isZhCN(Context context) {
-        Configuration config = context.getResources().getConfiguration();
-        Locale sysLocale;
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-            sysLocale = config.getLocales().get(0);
-        } else {
-            //noinspection deprecation
-            sysLocale = config.locale;
-        }
-        String lang = sysLocale.getCountry();
-        return lang.equalsIgnoreCase("CN");
-    }
-
-    /**
-     * 设置全屏
-     */
-    public static void setFullScreen(Context context) {
-        if (context instanceof Activity) {
-            Activity activity = (Activity) context;
-            WindowManager.LayoutParams params = activity.getWindow().getAttributes();
-            params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
-            activity.getWindow().setAttributes(params);
-            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
-        }
-
-    }
-
-    /**
-     * 取消全屏
-     */
-    public static void cancelFullScreen(Context context) {
-        if (context instanceof Activity) {
-            Activity activity = (Activity) context;
-            WindowManager.LayoutParams params = activity.getWindow().getAttributes();
-            params.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
-            activity.getWindow().setAttributes(params);
-            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
-        }
-    }
-
-    /**
-     * 判断是否全屏
-     */
-    public static boolean isFullScreen(Activity activity) {
-        WindowManager.LayoutParams params = activity.getWindow().getAttributes();
-        return (params.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) == WindowManager.LayoutParams.FLAG_FULLSCREEN;
-    }
-
-
-    public static boolean isElevationSupported() {
-        return Build.VERSION.SDK_INT >= 21;
-    }
-}

+ 0 - 78
kfzslibrary/src/main/java/com/kfzs/libs/utils/LangHelper.java

@@ -1,78 +0,0 @@
-package com.kfzs.libs.utils;
-
-/**
- * Created by guoxin on 2018/3/30.
- */
-
-import android.support.annotation.Nullable;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Locale;
-
-public class LangHelper {
-
-    /**
-     * 获取数值的位数,例如9返回1,99返回2,999返回3
-     *
-     * @param number 要计算位数的数值,必须>0
-     * @return 数值的位数,若传的参数小于等于0,则返回0
-     */
-    public static int getNumberDigits(int number) {
-        if (number <= 0) return 0;
-        return (int) (Math.log10(number) + 1);
-    }
-
-
-    public static int getNumberDigits(long number) {
-        if (number <= 0) return 0;
-        return (int) (Math.log10(number) + 1);
-    }
-
-    /**
-     * 规范化价格字符串显示的工具类
-     *
-     * @param price 价格
-     * @return 保留两位小数的价格字符串
-     */
-    public static String regularizePrice(float price) {
-        return String.format(Locale.CHINESE, "%.2f", price);
-    }
-
-    /**
-     * 规范化价格字符串显示的工具类
-     *
-     * @param price 价格
-     * @return 保留两位小数的价格字符串
-     */
-    public static String regularizePrice(double price) {
-        return String.format(Locale.CHINESE, "%.2f", price);
-    }
-
-
-    public static boolean isNullOrEmpty(@Nullable CharSequence string) {
-        return string == null || string.length() == 0;
-    }
-
-    public static void close(Closeable c) {
-        if (c != null) {
-            try {
-                c.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    public static boolean objectEquals(Object a, Object b) {
-        return (a == b) || (a != null && a.equals(b));
-    }
-
-    public static int constrain(int amount, int low, int high) {
-        return amount < low ? low : (amount > high ? high : amount);
-    }
-
-    public static float constrain(float amount, float low, float high) {
-        return amount < low ? low : (amount > high ? high : amount);
-    }
-}

+ 0 - 404
kfzslibrary/src/main/java/com/kfzs/libs/utils/StatusBarHelper.java

@@ -1,404 +0,0 @@
-package com.kfzs.libs.utils;
-
-/**
- * Created by guoxin on 2018/3/30.
- */
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Color;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.IntDef;
-import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-
-public class StatusBarHelper {
-
-    private final static int STATUSBAR_TYPE_DEFAULT = 0;
-    private final static int STATUSBAR_TYPE_MIUI = 1;
-    private final static int STATUSBAR_TYPE_FLYME = 2;
-    private final static int STATUSBAR_TYPE_ANDROID6 = 3; // Android 6.0
-    private final static int STATUS_BAR_DEFAULT_HEIGHT_DP = 25; // 大部分状态栏都是25dp
-    // 在某些机子上存在不同的density值,所以增加两个虚拟值
-    public static float sVirtualDensity = -1;
-    public static float sVirtualDensityDpi = -1;
-    private static int sStatusbarHeight = -1;
-    private static @StatusBarType int mStatuBarType = STATUSBAR_TYPE_DEFAULT;
-    private static Integer sTransparentValue;
-
-    public static void translucent(Activity activity) {
-        translucent(activity, 0x40000000);
-    }
-
-    /**
-     * 沉浸式状态栏。
-     * 支持 4.4 以上版本的 MIUI 和 Flyme,以及 5.0 以上版本的其他 Android。
-     *
-     * @param activity 需要被设置沉浸式状态栏的 Activity。
-     */
-    @TargetApi(19)
-    public static void translucent(Activity activity, @ColorInt int colorOn5x) {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
-            // 版本小于4.4,绝对不考虑沉浸式
-            return;
-        }
-        // 小米和魅族4.4 以上版本支持沉浸式
-        if (DeviceHelper.isMeizu() || DeviceHelper.isMIUI()) {
-            Window window = activity.getWindow();
-            window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
-                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
-            return;
-        }
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            Window window = activity.getWindow();
-            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && supportTransclentStatusBar6()) {
-                // android 6以后可以改状态栏字体颜色,因此可以自行设置为透明
-                // ZUK Z1是个另类,自家应用可以实现字体颜色变色,但没开放接口
-                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
-                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
-                window.setStatusBarColor(Color.TRANSPARENT);
-            } else {
-                // android 5不能修改状态栏字体颜色,因此直接用FLAG_TRANSLUCENT_STATUS,nexus表现为半透明
-                // 魅族和小米的表现如何?
-                // update: 部分手机运用FLAG_TRANSLUCENT_STATUS时背景不是半透明而是没有背景了。。。。。
-//                window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
-
-                // 采取setStatusBarColor的方式,部分机型不支持,那就纯黑了,保证状态栏图标可见
-                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
-                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
-                window.setStatusBarColor(colorOn5x);
-            }
-//        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-//            // android4.4的默认是从上到下黑到透明,我们的背景是白色,很难看,因此只做魅族和小米的
-//        } else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1){
-//            // 如果app 为白色,需要更改状态栏颜色,因此不能让19一下支持透明状态栏
-//            Window window = activity.getWindow();
-//            Integer transparentValue = getStatusBarAPITransparentValue(activity);
-//            if(transparentValue != null) {
-//                window.getDecorView().setSystemUiVisibility(transparentValue);
-//            }
-        }
-    }
-
-    /**
-     * 设置状态栏黑色字体图标,
-     * 支持 4.4 以上版本 MIUI 和 Flyme,以及 6.0 以上版本的其他 Android
-     *
-     * @param activity 需要被处理的 Activity
-     */
-    public static boolean setStatusBarLightMode(Activity activity) {
-        // 无语系列:ZTK C2016只能时间和电池图标变色。。。。
-        if (DeviceHelper.isZTKC2016()) {
-            return false;
-        }
-
-        if (mStatuBarType != STATUSBAR_TYPE_DEFAULT) {
-            return setStatusBarLightMode(activity, mStatuBarType);
-        }
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-            if (isMIUICustomStatusBarLightModeImpl() && MIUISetStatusBarLightMode(activity.getWindow(), true)) {
-                mStatuBarType = STATUSBAR_TYPE_MIUI;
-                return true;
-            } else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) {
-                mStatuBarType = STATUSBAR_TYPE_FLYME;
-                return true;
-            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                Android6SetStatusBarLightMode(activity.getWindow(), true);
-                mStatuBarType = STATUSBAR_TYPE_ANDROID6;
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 已知系统类型时,设置状态栏黑色字体图标。
-     * 支持 4.4 以上版本 MIUI 和 Flyme,以及 6.0 以上版本的其他 Android
-     *
-     * @param activity 需要被处理的 Activity
-     * @param type     StatusBar 类型,对应不同的系统
-     */
-    private static boolean setStatusBarLightMode(Activity activity, @StatusBarType int type) {
-        if (type == STATUSBAR_TYPE_MIUI) {
-            return MIUISetStatusBarLightMode(activity.getWindow(), true);
-        } else if (type == STATUSBAR_TYPE_FLYME) {
-            return FlymeSetStatusBarLightMode(activity.getWindow(), true);
-        } else if (type == STATUSBAR_TYPE_ANDROID6) {
-            return Android6SetStatusBarLightMode(activity.getWindow(), true);
-        }
-        return false;
-    }
-
-
-    /**
-     * 设置状态栏白色字体图标
-     * 支持 4.4 以上版本 MIUI 和 Flyme,以及 6.0 以上版本的其他 Android
-     */
-    public static boolean setStatusBarDarkMode(Activity activity) {
-        if (mStatuBarType == STATUSBAR_TYPE_DEFAULT) {
-            // 默认状态,不需要处理
-            return true;
-        }
-
-        if (mStatuBarType == STATUSBAR_TYPE_MIUI) {
-            return MIUISetStatusBarLightMode(activity.getWindow(), false);
-        } else if (mStatuBarType == STATUSBAR_TYPE_FLYME) {
-            return FlymeSetStatusBarLightMode(activity.getWindow(), false);
-        } else if (mStatuBarType == STATUSBAR_TYPE_ANDROID6) {
-            return Android6SetStatusBarLightMode(activity.getWindow(), false);
-        }
-        return true;
-    }
-
-    @TargetApi(23)
-    private static int changeStatusBarModeRetainFlag(Window window, int out) {
-        out = retainSystemUiFlag(window, out, View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
-        out = retainSystemUiFlag(window, out, View.SYSTEM_UI_FLAG_FULLSCREEN);
-        out = retainSystemUiFlag(window, out, View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
-        out = retainSystemUiFlag(window, out, View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
-        out = retainSystemUiFlag(window, out, View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
-        out = retainSystemUiFlag(window, out, View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
-        return out;
-    }
-
-    public static int retainSystemUiFlag(Window window, int out, int type) {
-        int now = window.getDecorView().getSystemUiVisibility();
-        if ((now & type) == type) {
-            out |= type;
-        }
-        return out;
-    }
-
-
-    /**
-     * 设置状态栏字体图标为深色,Android 6
-     *
-     * @param window 需要设置的窗口
-     * @param light  是否把状态栏字体及图标颜色设置为深色
-     * @return boolean 成功执行返回true
-     */
-    @TargetApi(23)
-    private static boolean Android6SetStatusBarLightMode(Window window, boolean light) {
-        View decorView = window.getDecorView();
-        int systemUi = light ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
-        systemUi = changeStatusBarModeRetainFlag(window, systemUi);
-        decorView.setSystemUiVisibility(systemUi);
-        return true;
-    }
-
-    /**
-     * 设置状态栏字体图标为深色,需要 MIUIV6 以上
-     *
-     * @param window 需要设置的窗口
-     * @param dark   是否把状态栏字体及图标颜色设置为深色
-     * @return boolean 成功执行返回 true
-     */
-    @SuppressWarnings("unchecked")
-    public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {
-        boolean result = false;
-        if (window != null) {
-            Class clazz = window.getClass();
-            try {
-                int darkModeFlag;
-                Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
-                Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
-                darkModeFlag = field.getInt(layoutParams);
-                Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
-                if (dark) {
-                    extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体
-                } else {
-                    extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
-                }
-                result = true;
-            } catch (Exception ignored) {
-
-            }
-        }
-        return result;
-    }
-
-    /**
-     * 更改状态栏图标、文字颜色的方案是否是MIUI自家的, MIUI9之后用回Android原生实现
-     * 见小米开发文档说明:https://dev.mi.com/console/doc/detail?pId=1159
-     */
-    private static boolean isMIUICustomStatusBarLightModeImpl() {
-        return DeviceHelper.isMIUIV5() || DeviceHelper.isMIUIV6() ||
-                DeviceHelper.isMIUIV7() || DeviceHelper.isMIUIV8();
-    }
-
-    /**
-     * 设置状态栏图标为深色和魅族特定的文字风格
-     * 可以用来判断是否为 Flyme 用户
-     *
-     * @param window 需要设置的窗口
-     * @param dark   是否把状态栏字体及图标颜色设置为深色
-     * @return boolean 成功执行返回true
-     */
-    public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
-
-        // flyme 在 6.2.0.0A 支持了 Android 官方的实现方案,旧的方案失效
-        Android6SetStatusBarLightMode(window, dark);
-
-        boolean result = false;
-        if (window != null) {
-            try {
-                WindowManager.LayoutParams lp = window.getAttributes();
-                Field darkFlag = WindowManager.LayoutParams.class
-                        .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
-                Field meizuFlags = WindowManager.LayoutParams.class
-                        .getDeclaredField("meizuFlags");
-                darkFlag.setAccessible(true);
-                meizuFlags.setAccessible(true);
-                int bit = darkFlag.getInt(null);
-                int value = meizuFlags.getInt(lp);
-                if (dark) {
-                    value |= bit;
-                } else {
-                    value &= ~bit;
-                }
-                meizuFlags.setInt(lp, value);
-                window.setAttributes(lp);
-                result = true;
-            } catch (Exception ignored) {
-
-            }
-        }
-        return result;
-    }
-
-    /**
-     * 获取是否全屏
-     *
-     * @return 是否全屏
-     */
-    public static boolean isFullScreen(Activity activity) {
-        boolean ret = false;
-        try {
-            WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
-            ret = (attrs.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return ret;
-    }
-
-    /**
-     * API19之前透明状态栏:获取设置透明状态栏的system ui visibility的值,这是部分有提供接口的rom使用的
-     * http://stackoverflow.com/questions/21865621/transparent-status-bar-before-4-4-kitkat
-     */
-    public static Integer getStatusBarAPITransparentValue(Context context) {
-        if (sTransparentValue != null) {
-            return sTransparentValue;
-        }
-        String[] systemSharedLibraryNames = context.getPackageManager()
-                .getSystemSharedLibraryNames();
-        String fieldName = null;
-        for (String lib : systemSharedLibraryNames) {
-            if ("touchwiz".equals(lib)) {
-                fieldName = "SYSTEM_UI_FLAG_TRANSPARENT_BACKGROUND";
-            } else if (lib.startsWith("com.sonyericsson.navigationbar")) {
-                fieldName = "SYSTEM_UI_FLAG_TRANSPARENT";
-            }
-        }
-
-        if (fieldName != null) {
-            try {
-                Field field = View.class.getField(fieldName);
-                if (field != null) {
-                    Class<?> type = field.getType();
-                    if (type == int.class) {
-                        sTransparentValue = field.getInt(null);
-                    }
-                }
-            } catch (Exception ignored) {
-            }
-        }
-        return sTransparentValue;
-    }
-
-    /**
-     * 检测 Android 6.0 是否可以启用 window.setStatusBarColor(Color.TRANSPARENT)。
-     */
-    public static boolean supportTransclentStatusBar6() {
-        return !(DeviceHelper.isZUKZ1() || DeviceHelper.isZTKC2016());
-    }
-
-    /**
-     * 获取状态栏的高度。
-     */
-    public static int getStatusbarHeight(Context context) {
-        if (sStatusbarHeight == -1) {
-            initStatusBarHeight(context);
-        }
-        return sStatusbarHeight;
-    }
-
-    private static void initStatusBarHeight(Context context) {
-        Class<?> clazz;
-        Object obj = null;
-        Field field = null;
-        try {
-            clazz = Class.forName("com.android.internal.R$dimen");
-            obj = clazz.newInstance();
-            if (DeviceHelper.isMeizu()) {
-                try {
-                    field = clazz.getField("status_bar_height_large");
-                } catch (Throwable t) {
-                    t.printStackTrace();
-                }
-            }
-            if (field == null) {
-                field = clazz.getField("status_bar_height");
-            }
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-        if (field != null && obj != null) {
-            try {
-                int id = Integer.parseInt(field.get(obj).toString());
-                sStatusbarHeight = context.getResources().getDimensionPixelSize(id);
-            } catch (Throwable t) {
-                t.printStackTrace();
-            }
-        }
-        if (DeviceHelper.isTablet(context)
-                && sStatusbarHeight > DisplayHelper.dp2px(context, STATUS_BAR_DEFAULT_HEIGHT_DP)) {
-            //状态栏高度大于25dp的平板,状态栏通常在下方
-            sStatusbarHeight = 0;
-        } else {
-            if (sStatusbarHeight <= 0
-                    || sStatusbarHeight > DisplayHelper.dp2px(context, STATUS_BAR_DEFAULT_HEIGHT_DP * 2)) {
-                //安卓默认状态栏高度为25dp,如果获取的状态高度大于2倍25dp的话,这个数值可能有问题,用回桌面定义的值从新获取。出现这种可能性较低,只有小部分手机出现
-                if (sVirtualDensity == -1) {
-                    sStatusbarHeight = DisplayHelper.dp2px(context, STATUS_BAR_DEFAULT_HEIGHT_DP);
-                } else {
-                    sStatusbarHeight = (int) (STATUS_BAR_DEFAULT_HEIGHT_DP * sVirtualDensity + 0.5f);
-                }
-            }
-        }
-    }
-
-    public static void setVirtualDensity(float density) {
-        sVirtualDensity = density;
-    }
-
-    public static void setVirtualDensityDpi(float densityDpi) {
-        sVirtualDensityDpi = densityDpi;
-    }
-
-    @IntDef({STATUSBAR_TYPE_DEFAULT, STATUSBAR_TYPE_MIUI, STATUSBAR_TYPE_FLYME, STATUSBAR_TYPE_ANDROID6})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface StatusBarType {
-    }
-
-}

+ 0 - 101
kfzslibrary/src/main/java/com/kfzs/libs/widget/CompleteCommitEditText.java

@@ -1,101 +0,0 @@
-package com.kfzs.libs.widget;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatAutoCompleteTextView;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.AttributeSet;
-import android.view.View;
-
-/**
- * Created by guoxin on 2018/4/2.
- */
-
-public class CompleteCommitEditText extends AppCompatAutoCompleteTextView implements TextWatcher,View.OnFocusChangeListener{
-
-    private static final String TAG = "CompleteCommitEditText";
-    private String lastText = "";
-
-    private OnCompleteEditListener onCompleteEditListener;
-
-    private boolean afterTextChangedCanComplete = false;
-
-    Runnable recorderRunnable = new Runnable() {
-        @Override
-        public void run() {
-            lastText = getText().toString();
-        }
-    };
-
-
-    public CompleteCommitEditText(Context context) {
-        super(context);
-        init();
-    }
-
-    public CompleteCommitEditText(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        init();
-    }
-
-    public CompleteCommitEditText(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        init();
-    }
-
-    private void init(){
-        addTextChangedListener(this);
-        setOnFocusChangeListener(this);
-    }
-
-    @Override
-    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
-    }
-
-    @Override
-    public void onTextChanged(CharSequence s, int start, int before, int count) {
-
-    }
-
-    @Override
-    public void afterTextChanged(Editable s) {
-
-        if(isFocusable() && afterTextChangedCanComplete){
-            String curText = getText().toString();
-            if(!TextUtils.equals(lastText,curText)){
-                if (onCompleteEditListener != null) {
-                    onCompleteEditListener.onCompleteEdit(curText);
-                }
-                postDelayed(recorderRunnable,500);
-            }
-        }
-    }
-
-    public void setAfterTextChangedCanComplete(boolean afterTextChangedCanComplete) {
-        this.afterTextChangedCanComplete = afterTextChangedCanComplete;
-    }
-
-    public void setOnCompleteEditListener(OnCompleteEditListener onCompleteEditListener) {
-        this.onCompleteEditListener = onCompleteEditListener;
-    }
-
-    @Override
-    public void onFocusChange(View v, boolean hasFocus) {
-        if(!hasFocus){//失去焦点
-            String curText = getText().toString();
-            if(!TextUtils.equals(curText,lastText)){//这里防止重新获取焦点后,上次填入的数据与这次一样,会引起重复提交
-                if(onCompleteEditListener != null){
-                    onCompleteEditListener.onCompleteEdit(curText);
-                }
-            }
-            lastText = curText;
-        }
-    }
-
-
-    public interface OnCompleteEditListener{
-        void onCompleteEdit(String text);
-    }
-}

+ 0 - 43
kfzslibrary/src/main/java/com/kfzs/libs/widget/TimeEditText.java

@@ -1,43 +0,0 @@
-package com.kfzs.libs.widget;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-
-/**
- * Created by realicing on 2018/4/10.
- * realicing@sina.com
- */
-public class TimeEditText extends CompleteCommitEditText{
-
-
-    public TimeEditText(Context context) {
-        super(context);
-    }
-
-    public TimeEditText(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public TimeEditText(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private long totalFocusTime;
-    private long startTime;
-    @Override
-    public void onFocusChange(View view, boolean b) {
-        super.onFocusChange(view, b);
-        if(b){
-            startTime = System.currentTimeMillis();
-        } else {
-            if(startTime != 0){
-                totalFocusTime += (System.currentTimeMillis() - startTime);
-            }
-        }
-    }
-
-    public long getTotalFocusTime() {
-        return totalFocusTime;
-    }
-}

+ 0 - 63
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaButton.java

@@ -1,63 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatButton;
-import android.util.AttributeSet;
-
-/**
- * 在 pressed 和 disabled 时改变 View 的透明度
- */
-public class AlphaButton extends AppCompatButton {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaButton(Context context) {
-        super(context);
-    }
-
-    public AlphaButton(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaButton(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-
-}

+ 0 - 62
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaFrameLayout.java

@@ -1,62 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.FrameLayout;
-
-/**
- * 在 pressed 和 disabled 时改变 View 的透明度
- */
-public class AlphaFrameLayout extends FrameLayout {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaFrameLayout(Context context) {
-        super(context);
-    }
-
-    public AlphaFrameLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-}

+ 0 - 60
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaImageButton.java

@@ -1,60 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatImageButton;
-import android.util.AttributeSet;
-
-public class AlphaImageButton extends AppCompatImageButton {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaImageButton(Context context) {
-        super(context);
-    }
-
-    public AlphaImageButton(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-
-}

+ 0 - 60
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaImageView.java

@@ -1,60 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatImageView;
-import android.util.AttributeSet;
-
-public class AlphaImageView extends AppCompatImageView {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaImageView(Context context) {
-        super(context);
-    }
-
-    public AlphaImageView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaImageView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-
-}

+ 0 - 63
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaLinearLayout.java

@@ -1,63 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.LinearLayout;
-
-/**
- * 在 pressed 和 disabled 时改变 View 的透明度
- */
-public class AlphaLinearLayout extends LinearLayout {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaLinearLayout(Context context) {
-        super(context);
-    }
-
-    public AlphaLinearLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-
-}

+ 0 - 63
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaRelativeLayout.java

@@ -1,63 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.RelativeLayout;
-
-/**
- * 在 pressed 和 disabled 时改变 View 的透明度
- */
-public class AlphaRelativeLayout extends RelativeLayout {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaRelativeLayout(Context context) {
-        super(context);
-    }
-
-    public AlphaRelativeLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-
-}

+ 0 - 62
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaTextView.java

@@ -1,62 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatTextView;
-import android.util.AttributeSet;
-
-/**
- * 在 pressed 和 disabled 时改变 View 的透明度
- */
-public class AlphaTextView extends AppCompatTextView {
-
-    private AlphaViewHelper mAlphaViewHelper;
-
-    public AlphaTextView(Context context) {
-        super(context);
-    }
-
-    public AlphaTextView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AlphaTextView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    private AlphaViewHelper getAlphaViewHelper() {
-        if (mAlphaViewHelper == null) {
-            mAlphaViewHelper = new AlphaViewHelper(this);
-        }
-        return mAlphaViewHelper;
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        getAlphaViewHelper().onPressedChanged(this, pressed);
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        getAlphaViewHelper().onEnabledChanged(this, enabled);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        getAlphaViewHelper().setChangeAlphaWhenPress(changeAlphaWhenPress);
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        getAlphaViewHelper().setChangeAlphaWhenDisable(changeAlphaWhenDisable);
-    }
-}

+ 0 - 67
kfzslibrary/src/main/java/com/kfzs/libs/widget/alpha/AlphaViewHelper.java

@@ -1,67 +0,0 @@
-package com.kfzs.libs.widget.alpha;
-
-import android.support.annotation.NonNull;
-import android.view.View;
-
-public class AlphaViewHelper {
-
-    private View mTarget;
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     */
-    private boolean mChangeAlphaWhenPress = true;
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     */
-    private boolean mChangeAlphaWhenDisable = true;
-
-    private float mNormalAlpha = 1f;
-    private float mPressedAlpha = 0.5f;
-    private float mDisabledAlpha = 0.5f;
-
-    public AlphaViewHelper(@NonNull View target) {
-        mTarget = target;
-    }
-
-    public void onPressedChanged(View target, boolean pressed) {
-        if (mTarget.isEnabled()) {
-            mTarget.setAlpha(mChangeAlphaWhenPress && pressed && target.isClickable()? mPressedAlpha : mNormalAlpha);
-        } else {
-            if (mChangeAlphaWhenDisable) {
-                target.setAlpha(mDisabledAlpha);
-            }
-        }
-    }
-
-    public void onEnabledChanged(View target, boolean enabled) {
-        float alphaForIsEnable;
-        if (mChangeAlphaWhenDisable) {
-            alphaForIsEnable = enabled ? mNormalAlpha : mDisabledAlpha;
-        } else {
-            alphaForIsEnable = mNormalAlpha;
-        }
-        target.setAlpha(alphaForIsEnable);
-    }
-
-    /**
-     * 设置是否要在 press 时改变透明度
-     *
-     * @param changeAlphaWhenPress 是否要在 press 时改变透明度
-     */
-    public void setChangeAlphaWhenPress(boolean changeAlphaWhenPress) {
-        mChangeAlphaWhenPress = changeAlphaWhenPress;
-    }
-
-    /**
-     * 设置是否要在 disabled 时改变透明度
-     *
-     * @param changeAlphaWhenDisable 是否要在 disabled 时改变透明度
-     */
-    public void setChangeAlphaWhenDisable(boolean changeAlphaWhenDisable) {
-        mChangeAlphaWhenDisable = changeAlphaWhenDisable;
-        onEnabledChanged(mTarget, mTarget.isEnabled());
-    }
-
-}

+ 0 - 37
kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupItem.java

@@ -1,37 +0,0 @@
-package com.kfzs.libs.widget.grouplist;
-
-import android.graphics.drawable.Drawable;
-import android.support.annotation.ColorRes;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.StringRes;
-
-/**
- * Created by Administrator on 2017/11/23 0023.
- */
-interface GroupItem {
-
-    GroupItem itemBackground(@DrawableRes int drawable);
-    GroupItem imageView(Drawable drawable);
-    GroupItem imageView(@DrawableRes int drawable);
-
-    GroupItem titleText(String text);
-    GroupItem subTitleText(String text);
-    GroupItem detailText(String text);
-
-    GroupItem titleText(@StringRes int text);
-    GroupItem subTitleText(@StringRes int text);
-    GroupItem detailText(@StringRes int text);
-
-    GroupItem titleTextSize(int unit, float size);
-    GroupItem subTitleTextSize(int unit, float size);
-    GroupItem detailTextSize(int unit, float size);
-
-    GroupItem titleTextSize(float size);
-    GroupItem subTitleTextSize(float size);
-    GroupItem detailTextSize(float size);
-
-    GroupItem titleTextColor(@ColorRes int color);
-    GroupItem subTitleTextColor(@ColorRes int color);
-    GroupItem detailTextColor(@ColorRes int color);
-
-}

+ 0 - 38
kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupListHeaderView.java

@@ -1,38 +0,0 @@
-package com.kfzs.libs.widget.grouplist;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatTextView;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.Gravity;
-
-/**
- * Created by Administrator on 2017/10/9 0009.
- */
-class GroupListHeaderView extends AppCompatTextView {
-    public GroupListHeaderView(Context context) {
-        this(context,null);
-    }
-
-    public GroupListHeaderView(Context context, AttributeSet attrs) {
-        this(context,attrs,0);
-    }
-
-    public GroupListHeaderView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        init(context,attrs,defStyleAttr);
-    }
-
-
-    private void init(Context context, AttributeSet attrs, int defStyleAttr){
-        setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
-        setSingleLine(true);
-        setEllipsize(TextUtils.TruncateAt.END);
-    }
-
-
-
-
-
-
-}

+ 0 - 293
kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupListItemAccessoryView.java

@@ -1,293 +0,0 @@
-package com.kfzs.libs.widget.grouplist;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.support.annotation.ColorRes;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ViewCompat;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-import android.widget.CheckBox;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.kfzs.libs.R;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Created by Administrator on 2017/11/22 0022.
- */
-
-public class GroupListItemAccessoryView extends LinearLayout implements GroupItem{
-
-    private ImageView mImageView;
-    private TextView mTitleView;
-    private TextView mSubTitleView;
-    private TextView mDetailView;
-    private ViewGroup mAccessoryView;
-    protected CheckBox mSwitchView;
-    protected ImageView mArrowView;
-
-
-    public GroupListItemAccessoryView(Context context) {
-        this(context,null);
-    }
-
-    public GroupListItemAccessoryView(Context context, AttributeSet attrs) {
-        this(context,attrs, 0);
-    }
-
-    public GroupListItemAccessoryView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        init(context,attrs,defStyleAttr);
-    }
-
-    private void init(Context context, AttributeSet attrs, int defStyleAttr){
-        LayoutInflater.from(context).inflate(R.layout.grouplist_item_view, this, true);
-        initWidget();
-
-        setMinimumHeight(getResources().getDimensionPixelSize(R.dimen.gx_groupList_item_minHeight));
-        setGravity(Gravity.CENTER_VERTICAL);
-
-        Drawable drawable  = ContextCompat.getDrawable(context,R.drawable.s_item_bg_double_border);
-        if(Build.VERSION.SDK_INT >= 16){
-            setBackground(drawable);
-        }
-        else setBackgroundDrawable(drawable);
-    }
-
-    private void initWidget(){
-        mImageView = (ImageView) findViewById(R.id.gx_groupList_item_imageView);
-        mTitleView = (TextView) findViewById(R.id.gx_groupList_item_titleTextView);
-        mSubTitleView = (TextView) findViewById(R.id.gx_groupList_item_subTitleTextView);
-        mDetailView = (TextView) findViewById(R.id.gx_groupList_item_detailTextView);
-        mAccessoryView = (ViewGroup) findViewById(R.id.gx_groupList_item_accessoryView);
-    }
-
-
-    public GroupListItemAccessoryView accessoryArrow(){
-        setAccessoryType(ACCESSORY_TYPE_ARROW);
-        return this;
-    }
-
-    public GroupListItemAccessoryView accessoryArrow(Drawable drawable){
-        setAccessoryType(ACCESSORY_TYPE_ARROW);
-        arrowDrawable(drawable);
-        return this;
-    }
-
-    public GroupListItemAccessoryView accessoryArrow(@DrawableRes int drawable){
-        setAccessoryType(ACCESSORY_TYPE_ARROW);
-        arrowDrawable(drawable);
-        return this;
-    }
-
-    public GroupListItemAccessoryView accessorySwitch(){
-        setAccessoryType(ACCESSORY_TYPE_SWITCH);
-        return this;
-    }
-
-    public GroupListItemAccessoryView accessorySwitch(@DrawableRes int drawable){
-        setAccessoryType(ACCESSORY_TYPE_SWITCH);
-        switchDrawable(drawable);
-        return this;
-    }
-
-    private void arrowDrawable(Drawable drawable) {
-        mArrowView.setImageDrawable(drawable);
-    }
-
-    private void arrowDrawable(@DrawableRes int drawable) {
-        mArrowView.setImageResource(drawable);
-    }
-
-    private void switchDrawable(@DrawableRes int drawable) {
-        mSwitchView.setButtonDrawable(drawable);
-    }
-
-
-    @Override
-    public GroupListItemAccessoryView itemBackground(@DrawableRes int drawable) {
-        ViewCompat.setBackground(this, ContextCompat.getDrawable(getContext(), drawable));
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView imageView(@NonNull Drawable drawable) {
-        mImageView.setImageDrawable(drawable);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView imageView(@DrawableRes int drawable) {
-        mImageView.setImageResource(drawable);
-        return this;
-    }
-
-
-    @Override
-    public GroupListItemAccessoryView titleText(String text) {
-        mTitleView.setText(text);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView subTitleText(String text) {
-        if(!TextUtils.isEmpty(text)){
-            mSubTitleView.setText(text);
-            mSubTitleView.setVisibility(VISIBLE);
-        }
-        else mSubTitleView.setVisibility(GONE);
-
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView detailText(String text) {
-        mDetailView.setText(text);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView titleText(@StringRes int text) {
-        mTitleView.setText(text);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView subTitleText(@StringRes int text) {
-        String str = getResources().getString(text);
-       return subTitleText(str);
-    }
-
-    @Override
-    public GroupListItemAccessoryView detailText(@StringRes int text) {
-        mDetailView.setText(text);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView titleTextSize(int unit, float size) {
-        mTitleView.setTextSize(unit,size);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView subTitleTextSize(int unit, float size) {
-        mSubTitleView.setTextSize(unit,size);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView detailTextSize(int unit, float size) {
-        mDetailView.setTextSize(unit,size);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView titleTextSize(float size) {
-        mTitleView.setTextSize(size);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView subTitleTextSize(float size) {
-        mSubTitleView.setTextSize(size);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView detailTextSize(float size) {
-        mDetailView.setTextSize(size);
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView titleTextColor(@ColorRes int color) {
-        mTitleView.setTextColor(ContextCompat.getColor(getContext(), color));
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView subTitleTextColor(@ColorRes int color) {
-        mSubTitleView.setTextColor(ContextCompat.getColor(getContext(), color));
-        return this;
-    }
-
-    @Override
-    public GroupListItemAccessoryView detailTextColor(@ColorRes int color) {
-        mDetailView.setTextColor(ContextCompat.getColor(getContext(), color));
-        return this;
-    }
-
-
-    private ViewGroup.LayoutParams getAccessoryLayoutParams() {
-        return new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-    }
-
-
-    private void setAccessoryType(@AccessoryViewType int type){
-        mAccessoryView.removeAllViews();
-        switch (type){
-            case ACCESSORY_TYPE_ARROW:
-                if(mArrowView == null){
-                    mArrowView = new ImageView(getContext());
-                    mArrowView.setLayoutParams(getAccessoryLayoutParams());
-                }
-                mAccessoryView.addView(mArrowView);
-                break;
-            case ACCESSORY_TYPE_SWITCH:
-                if(mSwitchView == null){
-                    mSwitchView = new CheckBox(getContext());
-                    mSwitchView.setLayoutParams(getAccessoryLayoutParams());
-                    // disable掉且不可点击,然后通过整个item的点击事件来toggle开关的状态
-                    mSwitchView.setClickable(false);
-                }
-                mAccessoryView.addView(mSwitchView);
-                break;
-        }
-
-    }
-
-    public void toggleSwitch(){
-        if(mSwitchView != null){
-            mSwitchView.toggle();
-        }
-    }
-
-
-//    /**
-//     * 右侧不显示任何东西
-//     */
-//    public final static int ACCESSORY_TYPE_NONE = 0;
-    /**
-     * 右侧显示一个箭头
-     */
-    public final static int ACCESSORY_TYPE_ARROW = 1;
-    /**
-     * 右侧显示一个开关
-     */
-    public final static int ACCESSORY_TYPE_SWITCH = 2;
-//    /**
-//     * 自定义右侧显示的 View
-//     */
-//    public final static int ACCESSORY_TYPE_CUSTOM = 3;
-
-//    @IntDef({ACCESSORY_TYPE_NONE, ACCESSORY_TYPE_ARROW, ACCESSORY_TYPE_SWITCH, ACCESSORY_TYPE_CUSTOM})
-    @IntDef({ACCESSORY_TYPE_ARROW, ACCESSORY_TYPE_SWITCH})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface AccessoryViewType{}
-
-
-}

+ 0 - 210
kfzslibrary/src/main/java/com/kfzs/libs/widget/grouplist/GroupListView.java

@@ -1,210 +0,0 @@
-package com.kfzs.libs.widget.grouplist;
-
-import android.content.Context;
-import android.support.annotation.ColorRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ViewCompat;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.SparseArray;
-import android.util.TypedValue;
-import android.view.View;
-import android.widget.LinearLayout;
-
-import com.kfzs.libs.R;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Created by Administrator on 2017/10/9 0009.
- */
-
-public class GroupListView extends LinearLayout {
-
-    public static final String TAG = "GroupListView";
-
-
-    public static final int SEPARATOR_STYLE_NORMAL = 0;
-    public static final int SEPARATOR_STYLE_NONE = 1;
-    private int mSeparatorStyle = SEPARATOR_STYLE_NORMAL;
-    private SparseArray<Section> mSections;
-
-    public GroupListView(Context context) {
-        this(context,null);
-    }
-
-    public GroupListView(Context context, @Nullable AttributeSet attrs) {
-        this(context,attrs, 0);
-    }
-
-    public GroupListView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        init(context,attrs,defStyleAttr);
-    }
-
-
-    protected void init(Context context, AttributeSet attrs, int defStyleAttr){
-        mSections = new SparseArray<Section>();
-        setOrientation(VERTICAL);
-    }
-
-    public void setSeparatorStyle(@SeparatorStyle int separatorStyle) {
-        mSeparatorStyle = separatorStyle;
-    }
-
-    private void addSection(Section section){
-        mSections.append(mSections.size(),section);
-    }
-
-    private void removeSection(Section section) {
-        for (int i = 0; i < mSections.size(); i++) {
-            Section each = mSections.valueAt(i);
-            if (each == section) {
-                mSections.remove(i);
-            }
-        }
-    }
-    public Section getSection(int index) {
-        return mSections.get(index);
-    }
-
-    public @SeparatorStyle int getSeparatorStyle() {
-        return mSeparatorStyle;
-    }
-
-    public static class Section{
-
-        private SparseArray<View> mItemViews;
-        private Context mContext;
-        private String mTitle = "";
-        private int mHeaderHeight;
-        private int mHeaderTextSize;
-        private int mUnit = TypedValue.COMPLEX_UNIT_PX;
-        private int mHeaderTextColor;
-        private int mPadding;
-
-        private int mSeparatorDrawableForSingle = 0;
-        private int mSeparatorDrawableForTop = 0;
-        private int mSeparatorDrawableForBottom = 0;
-        private int mSeparatorDrawableForMiddle = 0;
-
-        public Section(Context context){
-            mContext = context;
-            mItemViews = new SparseArray<View>();
-            mPadding = context.getResources().getDimensionPixelOffset(R.dimen.gx_groupList_item_horizontalPadding);
-            mHeaderHeight = context.getResources().getDimensionPixelOffset(R.dimen.gx_groupList_item_headerHeight);
-            mHeaderTextSize = (int) context.getResources().getDimension(R.dimen.gx_groupList_item_header_textSize);
-            mHeaderTextColor = ContextCompat.getColor(mContext,R.color.gx_groupList_item_header_textColor);
-        }
-
-        public Section headerTitle(String title){
-            mTitle = title;
-            return this;
-        }
-
-        public Section headerTextSize(int size){
-            mHeaderTextSize = size;
-            return this;
-        }
-
-        public Section headerTextSize(int unit,int size){
-            mUnit = unit;
-            mHeaderTextSize = size;
-            return this;
-        }
-
-        public Section headerTextColor(@ColorRes int color){
-            mHeaderTextColor = ContextCompat.getColor(mContext, color);
-            return this;
-        }
-
-        public Section headerHeight(int height){
-            mHeaderHeight = height;
-            return this;
-        }
-
-        public Section itemPadding(int padding){
-            mPadding = padding;
-            return this;
-        }
-
-        public Section addItemView(GroupItem itemView){
-            mItemViews.append(mItemViews.size(), (View) itemView);
-            return this;
-        }
-
-        public void attachToGroupListView(GroupListView groupListView){
-
-            attachHeaderView(groupListView);
-
-            if (groupListView.getSeparatorStyle() == SEPARATOR_STYLE_NORMAL) {
-                if (mSeparatorDrawableForSingle == 0) {
-                    mSeparatorDrawableForSingle = R.drawable.s_item_bg_double_border;
-                }
-                if (mSeparatorDrawableForTop == 0) {
-                    mSeparatorDrawableForTop = R.drawable.s_item_bg_double_border;
-                }
-
-                if (mSeparatorDrawableForBottom == 0) {
-                    mSeparatorDrawableForBottom = R.drawable.s_list_item_bg_bottom_border;
-                }
-
-                if (mSeparatorDrawableForMiddle == 0) {
-                    mSeparatorDrawableForMiddle = R.drawable.s_list_item_bg_bottom_border;
-                }
-            }
-
-            int itemCount = mItemViews.size();
-            for(int i=0;i<itemCount;i++){
-                View itemView = mItemViews.get(i);
-                int resDrawableId;
-                if (groupListView.getSeparatorStyle() == SEPARATOR_STYLE_NORMAL) {
-                    if (itemCount == 1) {
-                        resDrawableId = mSeparatorDrawableForSingle;
-                    } else if (i == 0) {
-                        resDrawableId = mSeparatorDrawableForTop;
-                    } else if (i == itemCount - 1) {
-                        resDrawableId = mSeparatorDrawableForBottom;
-                    } else {
-                        resDrawableId = mSeparatorDrawableForMiddle;
-                    }
-                } else {
-                    resDrawableId = R.drawable.s_list_item_bg_none_border;
-                }
-
-                ViewCompat.setBackground(itemView, ContextCompat.getDrawable(mContext,resDrawableId));
-                int[] padding = new int[]{mPadding, itemView.getPaddingTop(), mPadding, itemView.getPaddingBottom()};
-                itemView.setPadding(padding[0], padding[1], padding[2], padding[3]);
-                groupListView.addView(itemView);
-            }
-
-            groupListView.addSection(this);
-
-        }
-
-        private void attachHeaderView(GroupListView groupListView){
-            GroupListHeaderView headerView = new GroupListHeaderView(mContext);
-            headerView.setTextSize(mUnit,mHeaderTextSize);
-            headerView.setTextColor(mHeaderTextColor);
-            headerView.setPadding(mPadding, headerView.getPaddingTop(), mPadding, headerView.getPaddingBottom());
-            LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,mHeaderHeight);
-            headerView.setLayoutParams(params);
-            if(!TextUtils.isEmpty(mTitle)){
-                headerView.setText(mTitle);
-            }
-            groupListView.addView(headerView);
-        }
-
-
-    }
-
-
-
-    @IntDef({SEPARATOR_STYLE_NORMAL, SEPARATOR_STYLE_NONE})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface SeparatorStyle {
-    }
-}

+ 0 - 211
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/Loader.java

@@ -1,211 +0,0 @@
-package com.kfzs.libs.widget.loading;
-
-
-import android.app.Activity;
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-import com.kfzs.libs.widget.loading.viewport.ShowingViewport;
-import com.kfzs.libs.widget.loading.viewport.SuccessViewport;
-
-import java.lang.ref.WeakReference;
-
-/**
- * loading事件构造类
- * Created by Administrator on 2017/9/26 0026.
- */
-
-public final class Loader {
-
-    private Builder mBuilder;
-
-    private Loader(Builder builder){
-        mBuilder = builder;
-    }
-
-    public int getKey(){
-        return mBuilder.getTarget().hashCode();
-    }
-
-    public void showViewport(Class<? extends ShowingViewport> cls){
-        mBuilder.showViewport(cls);
-    }
-
-    public LoadingLayout getLoadLayout(){
-        return mBuilder.getLoadingLayout();
-    }
-
-    public void clear(){
-        mBuilder.clearReference();
-    }
-
-    /**
-     * 数据构建类
-     */
-    public static class Builder{
-
-        private WeakReference<Object> mObjectWeakReference;
-        private LoadingLayout mLoadingLayout;
-        private TargetContext mTargetContext;
-        private Class<? extends ShowingViewport> mDefaultViewportClass;
-
-        public Builder(View view){
-            mObjectWeakReference = new WeakReference<>((Object)view);
-            mTargetContext = getTargetContext(view);
-            mLoadingLayout = new LoadingLayout(mTargetContext);
-            mLoadingLayout.setObjectWeakReference(mObjectWeakReference);
-        }
-
-        public Builder(Activity activity){
-            mObjectWeakReference = new WeakReference<>((Object) activity);
-            mTargetContext = getTargetContext(activity);
-            mLoadingLayout = new LoadingLayout(mTargetContext);
-            mLoadingLayout.setObjectWeakReference(mObjectWeakReference);
-        }
-
-        public Builder(SupportLoadingFragment fragment){
-            mObjectWeakReference = new WeakReference<>((Object)fragment);
-            mTargetContext = getTargetContext(fragment);
-            mLoadingLayout = new LoadingLayout(mTargetContext);
-            mLoadingLayout.setObjectWeakReference(mObjectWeakReference);
-        }
-
-        public void clearReference(){
-            mLoadingLayout = null;
-            mObjectWeakReference.clear();
-        }
-
-        public Builder addViewport(ShowingViewport viewport){
-            if(viewport != null){
-                mLoadingLayout.addShowingViewport(viewport);
-            }
-            return this;
-        }
-
-
-        public Builder setDefaultViewport(Class<? extends ShowingViewport> defaultViewportClass){
-            mDefaultViewportClass = defaultViewportClass;
-            return this;
-        }
-
-//        public Builder setOnReloadListener(ShowingViewport.OnReloadListener onReloadListener){
-//            mLoadingLayout.setOnReloadListener(onReloadListener);
-//            return this;
-//        }
-
-        public Object getTarget() {
-            return mObjectWeakReference.get();
-        }
-
-        public Loader build(){
-            mLoadingLayout.setSuccessViewport(
-                    new SuccessViewport(
-                            mTargetContext.getContext(),
-                            mTargetContext.getOldContent(),
-                            null
-                    )
-            );
-            if (mTargetContext.getParentView() != null) {//不为空时,替换的target为Activity和xml中的View
-
-                if(mObjectWeakReference.get() != null && mObjectWeakReference.get() instanceof Activity){
-                    mTargetContext.getParentView()
-                            .addView(
-                                    mLoadingLayout,
-                                    mTargetContext.getChildIndex(),
-                                    mTargetContext.getOldContent().getLayoutParams()
-                            );
-                    mTargetContext.getParentView()
-                            .addView(
-                                    mTargetContext.getOldContent(),
-                                    mTargetContext.getChildIndex() + 1,
-                                    mTargetContext.getOldContent().getLayoutParams()
-                            );
-                    mTargetContext.getOldContent().setVisibility(View.GONE);
-                }
-                else {
-                    //为xml中的View时,考虑到RelativeLayout和ConstraintLayout这种,
-                    // xml中的View需要依靠某些View的Id来确定相对位置,因此必须将替换的View的Id设置为当前替换目标的Id,
-                    // 不然依赖的View,找不到该Id就会使得界面上的布局显示错乱
-                    mLoadingLayout.setId(mTargetContext.getOldContentId());
-                    mTargetContext.getParentView()
-                            .addView(
-                                    mLoadingLayout,
-                                    mTargetContext.getChildIndex(),
-                                    mTargetContext.getOldContent().getLayoutParams()
-                            );
-                }
-
-            }
-
-
-            if(mDefaultViewportClass != null){
-                mLoadingLayout.replaceWithViewport(mDefaultViewportClass);
-            }
-            else mLoadingLayout.replaceWithViewport(SuccessViewport.class);
-
-            return new Loader(this);
-        }
-
-
-        public void showViewport(Class<? extends ShowingViewport> cls){
-            mLoadingLayout.replaceWithViewport(cls);
-        }
-
-        public LoadingLayout getLoadingLayout() {
-            return mLoadingLayout;
-        }
-    }
-
-
-    private static TargetContext getTargetContext(Object target) {
-        ViewGroup contentParent;
-        Context context;
-        if (target instanceof Activity) {
-            Activity activity = (Activity) target;
-            context = activity;
-            contentParent = (ViewGroup) activity.findViewById(android.R.id.content);
-        } else if (target instanceof View) {
-            View view = (View) target;
-            contentParent = (ViewGroup) (view.getParent());
-            context = view.getContext();
-        }
-        else if(target instanceof SupportLoadingFragment){
-            SupportLoadingFragment fragment = (SupportLoadingFragment) target;
-            View view = fragment.getView();
-            contentParent = (ViewGroup) view;
-            context = fragment.getContext();
-        }
-        else {
-            throw new IllegalArgumentException("The target must be within Activity, SupportLoadingFragment, View.");
-        }
-        int childIndex = 0;
-        int childCount = contentParent == null ? 0 : contentParent.getChildCount();
-        View oldContent;
-        if (target instanceof View) {
-            oldContent = (View) target;
-            for (int i = 0; i < childCount; i++) {
-                if (contentParent.getChildAt(i) == oldContent) {
-                    childIndex = i;
-                    break;
-                }
-            }
-        } else {
-            oldContent = contentParent != null ? contentParent.getChildAt(0) : null;
-        }
-        if (oldContent == null) {
-            throw new IllegalArgumentException(String.format("unexpected error when register LoadHelper in %s", target
-                    .getClass().getSimpleName()));
-        }
-
-        int oldContentId = oldContent.getId();
-
-        if (contentParent != null) {
-            contentParent.removeView(oldContent);
-        }
-
-        return new TargetContext(context, contentParent, oldContent, oldContentId, childIndex);
-    }
-
-
-
-}

+ 0 - 319
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/LoadingHelper.java

@@ -1,319 +0,0 @@
-package com.kfzs.libs.widget.loading;
-
-import android.app.Activity;
-import android.support.annotation.NonNull;
-import android.util.SparseArray;
-import android.view.View;
-
-import com.kfzs.libs.widget.loading.viewport.ShowingViewport;
-import com.kfzs.libs.widget.loading.viewport.SuccessViewport;
-
-/**
- * 界面或者View,任何一处都可以使用的加载辅助类,
- * 该类使用方便,无侵入,可以全局设置(已经去掉相关代码,暂时不支持),也可以在具体的界面或某个具体View上设置。
- * Created by Administrator on 2017/9/26 0026.
- */
-
-/**
- * 基本用法举例如下:
- * 第一步:创建需要显示的ShowingViewport类。
- * LoadingViewport loadingViewport = new LoadingViewport();
- * ErrorViewport errorViewport = new ErrorViewport();
- * errorViewport.setOnReloadListener(
- *          new ShowingViewport.OnReloadListener() {
- *              @Override
- *              public void onReload(View v) {
- *
- *              }
- *          }
- * );
- * 注:LoadingViewport为继承自ShowingViewport的类,表示正在加载状态的视图,ErrorViewport为继承自ShowingViewport的类,表示加载错误的视图状态,
- * setOnReloadListener表示设置重新加载时候的回调,ErrorViewport中具体哪个控件能够响应该回调,需要在对象的initRetry中配置。
- * 第二步:构建一个Loader对象,用来添加loading事件的各种视图状态,还有loading的目标对象。
- * 注:Builder构造方法中传入的就是loading的目标对象,例子中传入的是Activity,也可以是某个Fragment或者View。addViewport是添加一种会用到的视图状态,setDefaultViewport是设置默认显示的视图状态。
- * Loader loader =new Loader.Builder(MainActivity.this).addViewport(loadingViewport).addViewport(errorViewport).setDefaultViewport(LoadingViewport.class).build();
- *第三步:注册loading事件,并且绑定Loader对象。
- *LoadingHelper.getHelper().register(MainActivity.this, loader);
- * 第四步:通过LoadingHelper对象,根据业务逻辑,可以随意切换视图状态,例如:
- * 显示成功状态: LoadingHelper.getHelper().showSuccess(MainActivity.this);
- * 显示当前自定义好的错误状态:LoadingHelper.getHelper().showViewport(MainActivity.this,ErrorViewport.class);
- * 如果有其他状态,需要先自定义,然后根据显示错误状态的类似代码进行显示,如果要显示某种状态,必须在Loader中先添加该状态的实例对象,否则无法找到。
- * 第五步:注销loading事件,并将目标绑定的Loader对象从LoadingHelper单例中移除。
- *  LoadingHelper.getHelper().unRegister(MainActivity.this);
- *  注释:(1)如果是在Activity中注册Activity和View的loading事件,前四步可以在onCreate中调用,
- *  但如果是在Fragment中注册Fragment和View的loading事件,需要在onCreateView完成之后才能调用,因为只有onCreateView方法完成后,
- *  Fragment才会有根视图,可在Fragment的onViewCreated中完成前四步。第五步需要在Activity和Fragment的onDestroy方法和onDestroyView方法中调用。
- * (2)使用loading事件的目标对象,即Activity,Fragment,View三种,不能够修改hashcode的默认方法,因为注册loading事件对应绑定的loader对象,就是通过hash值来确定唯一性的。
- */
-
-public final class LoadingHelper {
-
-    private static volatile LoadingHelper sHelper;
-
-    private SparseArray<Loader> mLoaders;
-//    private Settings mDefaultSettings;
-
-
-    private LoadingHelper(){
-        mLoaders = new SparseArray<Loader>();
-
-    }
-    public static LoadingHelper getHelper(){
-
-        if(sHelper == null){
-            synchronized (LoadingHelper.class){
-                if(sHelper == null){
-                    sHelper = new LoadingHelper();
-                }
-            }
-        }
-        return sHelper;
-    }
-
-//    public Settings defaultSettings(){
-//        return new Settings();
-//    }
-//
-//    void setDefaultSettings(Settings settings){
-//        mDefaultSettings = settings;
-//    }
-
-
-    /**
-     * 通过全局配置好的统一Loader,进行Loading事件,该方法使用的前提,必须全局配置过Settings类
-     * @param target
-     * @param onReloadListener
-     * @return
-     */
-//    public LoadingHelper registerWithDefault(@NonNull Object target, ShowingViewport.OnReloadListener onReloadListener){
-//        Loader loader =
-//                getDefaultBuilder(target,mDefaultSettings)
-////                        .setOnReloadListener(onReloadListener)
-//                        .build();
-//        registerLoader(target,loader);
-//        return getHelper();
-//    }
-
-    /**
-     * 注册Loading事件
-     * @param target 只能是Activity,SupportLoadingFragment,View的子类
-     * @param loader 封装loading数据的对象
-     * @return LoadingHelper加载单例助手
-     */
-    private LoadingHelper registerLoader(@NonNull Object target, Loader loader){
-        targetLegal(target);
-        mLoaders.put(loader.getKey(),loader);
-        return getHelper();
-    }
-    /**
-     *注销Loading事件,这里传入的ta
-     * @param target 只能是Activity,SupportLoadingFragment,View的子类,并且这里的target必须与调用register注册的target是同一个对象
-     */
-    private void unRegisterLoader(@NonNull Object target){
-        if(target != null){
-            targetLegal(target);
-            int hashCode = target.hashCode();
-            mLoaders.get(hashCode).clear();
-            mLoaders.delete(hashCode);
-        }
-    }
-
-    public LoadingHelper register(@NonNull View view, Loader loader){
-        return registerLoader(view,loader);
-    }
-
-    public LoadingHelper register(@NonNull Activity activity,Loader loader){
-        return registerLoader(activity,loader);
-    }
-
-    public LoadingHelper register(@NonNull SupportLoadingFragment fragment, Loader loader){
-        return registerLoader(fragment,loader);
-    }
-
-    public void unRegister(@NonNull Activity activity){
-        unRegisterLoader(activity);
-    }
-
-    public void unRegister(@NonNull SupportLoadingFragment fragment){
-        unRegisterLoader(fragment);
-    }
-
-    public void unRegister(@NonNull View view){
-        unRegisterLoader(view);
-    }
-
-    /**
-     *获取loading时候的LoadingLayout
-     * @param target  该target必须传入与注册时候的target是同一个对象
-     * @return
-     */
-    public LoadingLayout getLoadLayout(@NonNull Object target){
-        return getLoader(target).getLoadLayout();
-    }
-
-    /**
-     * 获取当前拥有的Loader数量
-     * @return
-     */
-    public int getLoaderSize(){
-        return mLoaders.size();
-    }
-
-
-    /**
-     * 显示某个ShowingViewport视图
-     * @param target  注册时候对应的target
-     * @param viewport ShowingViewport视图class类型
-     */
-    private void showViewportUI(@NonNull Object target, Class<? extends ShowingViewport> viewport){
-        targetLegal(target);
-        Loader loader = getLoader(target);
-        if(loader != null){
-            loader.showViewport(viewport);
-        }
-    }
-
-    public void showViewport(@NonNull Activity activity, Class<? extends ShowingViewport> viewport){
-        showViewportUI(activity,viewport);
-    }
-
-    public void showViewport(@NonNull View view, Class<? extends ShowingViewport> viewport){
-        showViewportUI(view,viewport);
-    }
-
-    public void showViewport(@NonNull SupportLoadingFragment fragment, Class<? extends ShowingViewport> viewport){
-        showViewportUI(fragment,viewport);
-    }
-
-
-
-    /**
-     * 显示加载成功,或者完成时候的状态,也就是正常要显示的界面
-     * @param target
-     */
-    private void showSuccessUI(@NonNull Object target){
-        targetLegal(target);
-        Loader loader = getLoader(target);
-        if(loader != null){
-            loader.showViewport(SuccessViewport.class);
-        }
-    }
-
-    public void showSuccess(@NonNull Activity activity){
-        showSuccessUI(activity);
-    }
-
-    public void showSuccess(@NonNull View view){
-        showSuccessUI(view);
-    }
-
-    public void showSuccess(@NonNull SupportLoadingFragment fragment){
-        showSuccessUI(fragment);
-    }
-
-
-    /**
-     * 获取默认的Loader.Builder,该方法用于全局配置统一的加载视图,
-     * 从配置好的Settings中获取设置的Loader.Builder对象
-     * @param target
-     * @param defaultSettings
-     * @return
-     */
-//    private Loader.Builder getDefaultBuilder(Object target, Settings defaultSettings){
-//        Loader.Builder builder = new Loader.Builder(target);
-//        if(defaultSettings == null){
-//            throw new IllegalStateException("before use registerWithDefault(Object target),you must first init a defaultSettings");
-//        }
-//        ArrayMap<Class<? extends ShowingViewport>,ShowingViewport> viewports = defaultSettings.getViewports();
-//        if(viewports != null && viewports.size() > 0){
-//            Set<Class<? extends ShowingViewport>> set = viewports.keySet();
-//            for(Iterator<Class<? extends ShowingViewport>> it = set.iterator(); it.hasNext();){
-//                builder.addViewport(viewports.get(it.next()));
-//            }
-//        }
-//
-//        Class<? extends ShowingViewport> defaultViewport = defaultSettings.getDefaultViewportClass();
-//        if(defaultViewport != null){
-//            builder.setDefaultViewport(defaultViewport);
-//        }
-//        return builder;
-//    }
-
-    /**
-     * @param target
-     * @return 根据传入的target获取对于target注册的loader事件,这里是通过target的hash值作为唯一定位值,因此target不能够重写hash,否则将会无效
-     */
-    private Loader getLoader(@NonNull Object target){
-        return mLoaders.get(target.hashCode());
-    }
-
-
-    /**
-     * 判断传入的target是否合法
-     * @param target 只能是Activity,Fragment,View对象
-     */
-    private void targetLegal(@NonNull Object target){
-        if(target == null){
-            throw new IllegalStateException("target must not be null");
-        }
-        if(!(target instanceof Activity) && !(target instanceof View) && !(target instanceof SupportLoadingFragment)){
-            throw new IllegalStateException("target must be extends Activity,Fragment or View");
-        }
-
-    }
-
-
-    /**
-     * 用来全局统一配置的配置选项类
-     */
-//    public static class Settings{
-//
-//        private ArrayMap<Class<? extends ShowingViewport>,ShowingViewport> mViewports;
-//        private Class<? extends ShowingViewport> mDefaultViewportClass;
-//
-//        public Settings(){
-//            mViewports = new ArrayMap<>();
-//        }
-//
-//        public Class<? extends ShowingViewport> getDefaultViewportClass() {
-//            return mDefaultViewportClass;
-//        }
-//
-//        public ArrayMap<Class<? extends ShowingViewport>, ShowingViewport> getViewports() {
-//            return mViewports;
-//        }
-//
-//
-//        /**
-//         * 设置默认显示的ShowingViewport视图
-//         * @param defaultViewportClass
-//         * @return
-//         */
-//        public Settings setDefaultShowingViewportClass(Class<? extends ShowingViewport> defaultViewportClass) {
-//            mDefaultViewportClass = defaultViewportClass;
-//            return this;
-//        }
-//
-//        /**
-//         * 添加一项需要显示的ShowingViewport视图
-//         * @param viewport
-//         * @return
-//         */
-//        public Settings addShowingViewport(ShowingViewport viewport){
-//            if(viewport != null){
-//                Class<? extends ShowingViewport> cls = viewport.getClass();
-//                if(!mViewports.containsKey(cls)){
-//                    mViewports.put(cls,viewport);
-//                }
-//            }
-//            return this;
-//        }
-//
-//        public void save(){
-//            getHelper().setDefaultSettings(this);
-//        }
-//
-//
-//    }
-
-}

+ 0 - 238
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/LoadingLayout.java

@@ -1,238 +0,0 @@
-package com.kfzs.libs.widget.loading;
-
-import android.app.Activity;
-import android.content.Context;
-import android.os.Looper;
-import android.support.annotation.NonNull;
-import android.support.v4.util.ArrayMap;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import com.kfzs.libs.widget.loading.viewport.ShowingViewport;
-import com.kfzs.libs.widget.loading.viewport.SuccessViewport;
-
-import java.lang.ref.WeakReference;
-
-
-/**
- * ShowingViewport的状态容器视图
- * Created by Administrator on 2017/9/26 0026.
- */
-
-public final class LoadingLayout extends FrameLayout {
-
-//    private ShowingViewport.OnReloadListener mOnReloadListener;
-    private Context mContext;
-    ArrayMap<Class<? extends ShowingViewport>,ShowingViewport> mViewports;
-    /**
-     * 通过TargetContext封装好的目标对象数据集合
-     */
-    private TargetContext mTargetContext;
-    /**
-     * 传入的目标对象,代表当前loading的目标是谁,这里只允许Activity,Fragment,View三种
-     */
-    private WeakReference<Object> mObjectWeakReference;
-
-
-    public LoadingLayout(@NonNull TargetContext targetContext) {
-        super(targetContext.getContext());
-        mTargetContext = targetContext;
-        this.mContext = targetContext.getContext();
-        mViewports = new ArrayMap<>();
-    }
-
-
-    public void setObjectWeakReference(WeakReference<Object> objectWeakReference) {
-        mObjectWeakReference = objectWeakReference;
-    }
-
-//    public void setOnReloadListener(ShowingViewport.OnReloadListener onReloadListener) {
-//        mOnReloadListener = onReloadListener;
-//        if(mViewports != null && mViewports.size() > 0){
-//            Set<Class<? extends ShowingViewport>> set = mViewports.keySet();
-//            for(Iterator<Class<? extends ShowingViewport>> it = set.iterator(); it.hasNext();){
-//                ShowingViewport showingViewport = mViewports.get(it.next());
-//                showingViewport.setOnReloadListener(onReloadListener);
-//            }
-//        }
-//    }
-
-    /**
-     * 添加一个状态ShowingViewport视图
-     * @param viewport
-     */
-    public void addShowingViewport(@NonNull ShowingViewport viewport){
-//        ShowingViewport cloneViewport = viewport.copy();
-        ShowingViewport cloneViewport = viewport;
-        cloneViewport.init( mContext,null, cloneViewport.getOnReloadListener());
-        Class<? extends ShowingViewport> cls = cloneViewport.getClass();
-        if(!mViewports.containsKey(cls)){
-            mViewports.put(cls,cloneViewport);
-        }
-    }
-
-    /**
-     * 保存ShowingViewport在mViewports中
-     * @param successViewport
-     */
-    public void setSuccessViewport(ShowingViewport successViewport){
-        Class<? extends ShowingViewport> cls = successViewport.getClass();
-        if(!mViewports.containsKey(cls)){
-            mViewports.put(cls,successViewport);
-        }
-    }
-
-
-    /**
-     * 用viewport替换当前的视图
-     * @param viewport 要替换的视图
-     */
-    public void replaceWithViewport(Class<? extends ShowingViewport> viewport){
-        if(!mViewports.containsKey(viewport)){
-            throw new IllegalArgumentException(
-                    String.format("The ShowingViewport (%s) is non-existent.", viewport.getSimpleName())
-            );
-        }
-        if (isMainThread()) {
-            showViewport(viewport);
-        } else {
-            postToMainThread(viewport);
-        }
-    }
-
-    private void postToMainThread(final Class<? extends ShowingViewport> viewport) {
-        post(new Runnable() {
-            @Override
-            public void run() {
-                showViewport(viewport);
-            }
-        });
-    }
-
-    private boolean isMainThread() {
-        return Looper.myLooper() == Looper.getMainLooper();
-    }
-
-    /**
-     * 显示cls对应的视图
-     * @param cls
-     */
-    private void showViewport(Class<? extends ShowingViewport> cls) {
-        if(cls == SuccessViewport.class){
-            ViewGroup parentView = mTargetContext.getParentView();
-            if(mObjectWeakReference.get() != null && mObjectWeakReference.get() instanceof Activity) {
-                setVisibility(View.GONE);
-                mTargetContext.getOldContent().setVisibility(View.VISIBLE);
-            }
-            else {
-                ShowingViewport successViewport = mViewports.get(SuccessViewport.class);
-                if(parentView != null){
-                    //将要显示加载成功的视图,也就是当前加载完成后正常显示的视图,因此需要将LoadingLayout从跟视图移除
-                    parentView.removeView(this);
-                    //先remove,防止多次重复调用SuccessViewport,addView时候抛出异常
-                    ViewGroup viewGroup = (ViewGroup) successViewport.getRootView().getParent();
-                    if(viewGroup != null){
-                        viewGroup.removeView(successViewport.getRootView());
-                    }
-                    //remove以后,添加就不会出问题,这里添加,显示加载完成后要显示的视图
-                    parentView.addView(successViewport.getRootView(),mTargetContext.getChildIndex(),mTargetContext.getOldContent().getLayoutParams());
-                }
-                else {
-                    addView(successViewport.getRootView());
-                }
-            }
-
-        }
-        else {
-
-            if (getChildCount() > 0) {
-                removeAllViews();
-            }
-
-            for (Class key : mViewports.keySet()) {
-                if (key == cls) {
-                    if(mObjectWeakReference.get() != null && mObjectWeakReference.get() instanceof Activity){
-                        setVisibility(View.VISIBLE);
-                        mTargetContext.getOldContent().setVisibility(View.GONE);
-                        addView(mViewports.get(key).getRootView());
-                    }
-                    else {
-
-                        //将oldContent先从父View移除,防止当前oldContent已经添加在某个视图上,再次调用addView会抛出异常
-                        ViewGroup viewGroup = (ViewGroup) mTargetContext.getOldContent().getParent();
-                        if(viewGroup != null){
-                            viewGroup.removeView(mTargetContext.getOldContent());
-                        }
-                        //将当前对象从parent移除,与上面oldContent同理
-                        ViewGroup thisParent = (ViewGroup) getParent();
-                        if (thisParent != null) {
-                            thisParent.removeView(this);
-                        }
-                        //添加当前要显示的showViewport视图到LoadingLayout
-                        addView(mViewports.get(key).getRootView());
-                        //在跟视图上替换成当前要设置的LoadingLayout
-                        ViewGroup parentView = mTargetContext.getParentView();
-                        parentView.addView(this,mTargetContext.getOldContent().getLayoutParams());
-
-                    }
-
-                }
-            }
-        }
-
-
-//        if(mObjectWeakReference.get() != null && mObjectWeakReference.get() instanceof Activity){
-//
-//            ViewGroup parentView = mTargetContext.getParentView();
-//            if(cls == SuccessViewport.class){
-//                parentView.removeView(this);
-//                mTargetContext.getOldContent().setVisibility(View.VISIBLE);
-//            }
-//            else {
-//                if (getChildCount() > 0) {
-//                    removeAllViews();
-//                }
-//
-//                for (Class key : mViewports.keySet()) {
-//                    if (key == cls) {
-//                        addView(mViewports.get(key).getRootView());
-//                    }
-//                }
-//            }
-//        }
-//        else {
-//
-//            if(cls == SuccessViewport.class){
-//                ViewGroup parentView = mTargetContext.getParentView();
-//                ShowingViewport successViewport = mViewports.get(SuccessViewport.class);
-//                if(parentView != null){
-//                    parentView.removeView(this);
-//                    parentView.addView(successViewport.getRootView(),mTargetContext.getChildIndex(),mTargetContext.getOldContent().getLayoutParams());
-//                }
-//                else addView(successViewport.getRootView());
-//
-//            }
-//            else {
-//                if (getChildCount() > 0) {
-//                    removeAllViews();
-//                }
-//
-//                for (Class key : mViewports.keySet()) {
-//                    if (key == cls) {
-//                        addView(mViewports.get(key).getRootView());
-//                    }
-//                }
-//            }
-//
-//        }
-
-
-
-
-    }
-
-
-
-
-}

+ 0 - 50
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/SupportLoadingFragment.java

@@ -1,50 +0,0 @@
-package com.kfzs.libs.widget.loading;
-
-import android.app.Activity;
-import android.content.Context;
-import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import butterknife.ButterKnife;
-
-
-/**
- * Fragment需要loading事件时候需要继承的基类
- * Created by Administrator on 2018/2/12 0012.
- */
-
-public abstract class SupportLoadingFragment extends Fragment {
-
-    protected Activity activity;
-
-    @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-        activity = (Activity) context;
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        //为了支持Loader,这里必须要添加一层底层容器,否则点击返回键第一次只会将原来的布局返回,不能起到原本的作用,需要点击两次返回键才会生效
-        FrameLayout loaderContainer = new FrameLayout(activity);
-        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
-        loaderContainer.setLayoutParams(layoutParams);
-        //添加Fragment的布局
-        View rootView = inflater.inflate(layoutResId(),loaderContainer,false);
-        loaderContainer.addView(rootView);
-        ButterKnife.bind(this, rootView);
-        setupViews(savedInstanceState);
-        return loaderContainer;
-    }
-
-    public abstract @LayoutRes int layoutResId();
-    public abstract void setupViews(@Nullable Bundle savedInstanceState);
-
-}

+ 0 - 49
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/TargetContext.java

@@ -1,49 +0,0 @@
-package com.kfzs.libs.widget.loading;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * 封装loading事件的目标对象的各种数据集合
- * Created by Administrator on 2017/9/26 0026.
- */
-
-final class TargetContext {
-
-    private Context mContext;
-    private ViewGroup mParentView;
-    private View mOldContent;
-    private int mChildIndex;
-    private int mOldContentId;
-
-    public TargetContext(Context context, ViewGroup parentView, View oldContent, int oldContentId, int childIndex) {
-        this.mContext = context;
-        this.mParentView = parentView;
-        this.mOldContent = oldContent;
-        this.mOldContentId = oldContentId;
-        this.mChildIndex = childIndex;
-    }
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public View getOldContent() {
-        return mOldContent;
-    }
-
-    public int getChildIndex() {
-        return mChildIndex;
-    }
-
-    public int getOldContentId() {
-        return mOldContentId;
-    }
-
-
-
-    public ViewGroup getParentView() {
-        return mParentView;
-    }
-}

+ 0 - 127
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/viewport/ShowingViewport.java

@@ -1,127 +0,0 @@
-package com.kfzs.libs.widget.loading.viewport;
-
-import android.content.Context;
-import android.view.View;
-
-import java.io.Serializable;
-
-
-/**
- * 使用该类必须要继承,加载过程中不同的状态,比如错误提示页面,加载中,数据为空,都应该继承该类,
- * 并将具体显示的UI视图,通过构造方法传入,该类支持点击重试,可以是当前整个界面点击重试刷新,
- * 也可以是具体某个按钮点击刷新,具体的逻辑重写抽象方法initRetry。
- * 重写抽象方法onCreateView,里面返回是一个layout资源id,用来表示当前定义的状态ShowingViewport视图的界面
- * Created by Administrator on 2017/9/26 0026.
- */
-
-public abstract class ShowingViewport implements Serializable {
-    private static final long serialVersionUID = 4415260470501529556L;
-    private View mRootView;
-    /**
-     * Context不能参与序列化,否则ShowingViewport整个对象无法序列化,
-     * ShowingViewport对象需要序列化,他内部的对象也需要序列化,不能够让Context参加序列化。
-     * 通过序列化深克隆已经弃用,目前不支持全局配置,因此Context不再需要加上transient修饰。
-     */
-    private Context mContext;
-    private OnReloadListener mOnReloadListener;
-
-    public ShowingViewport() {
-    }
-
-    ShowingViewport(Context context,View view, OnReloadListener onReloadListener) {
-        this.mRootView = view;
-        this.mContext = context;
-        this.mOnReloadListener = onReloadListener;
-    }
-
-    /**
-     * @param context
-     * @param view
-     * @param onReloadListener
-     */
-    public void init(Context context, View view, OnReloadListener onReloadListener) {
-        this.mRootView = view;
-        this.mContext = context;
-        this.mOnReloadListener = onReloadListener;
-    }
-
-
-    /**
-     * 深克隆(深拷贝),也可以实现Cloneable接口,然后重写clone方法,
-     * 这里用的序列化方式实现。
-     * 该序列化,只是拷贝对象本身
-     * @return
-     */
-//    public ShowingViewport copy() {
-//        ByteArrayOutputStream bao = new ByteArrayOutputStream();
-//        ObjectOutputStream oos;
-//        try {
-//            oos = new ObjectOutputStream(bao);
-//            oos.writeObject(this);
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-//        ByteArrayInputStream bis = new ByteArrayInputStream(bao.toByteArray());
-//        ObjectInputStream ois;
-//        Object obj = null;
-//        try {
-//            ois = new ObjectInputStream(bis);
-//            obj = ois.readObject();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return (ShowingViewport) obj;
-//    }
-
-
-    public void setOnReloadListener(OnReloadListener onReloadListener) {
-        this.mOnReloadListener = onReloadListener;
-    }
-
-    public OnReloadListener getOnReloadListener() {
-        return mOnReloadListener;
-    }
-
-    /**
-     * 获取当前ShowingViewport的视图View,如果没有就通过onCreateView传入的layout资源id加载
-     * @return
-     */
-    public View getRootView() {
-        int resId = onCreateView();
-        if (resId == 0 && mRootView != null) {
-            return mRootView;
-        }
-        mRootView = View.inflate(mContext, onCreateView(), null);
-        initRetry(mContext,mRootView);
-        return mRootView;
-    }
-
-    /**
-     * 监听重新加载的方法,直接调用即可
-     * @param view
-     */
-    public void onReload(View view){
-        if(mOnReloadListener != null){
-            mOnReloadListener.onReload(view);
-        }
-    }
-
-
-    public interface OnReloadListener {
-        void onReload(View v);
-    }
-
-    /**
-     *
-     * @return 返回当前ShowingViewport的视图layout资源id
-     */
-    protected abstract int onCreateView();
-
-    /**
-     * ShowingViewport视图中一些具体的控件初始化可在该方法中设置,
-     * 并且可以在该方法中设置重新加载得到点击事件
-     * @param context
-     * @param view
-     */
-    protected abstract void initRetry(Context context, View view);
-}

+ 0 - 29
kfzslibrary/src/main/java/com/kfzs/libs/widget/loading/viewport/SuccessViewport.java

@@ -1,29 +0,0 @@
-package com.kfzs.libs.widget.loading.viewport;
-
-import android.content.Context;
-import android.view.View;
-
-/**
- * 该类不能被继承,加载成功或者完成时候显示的界面
- * Created by Administrator on 2017/9/26 0026.
- */
-public final class SuccessViewport extends ShowingViewport {
-
-    public SuccessViewport(Context context, View view, OnReloadListener onReloadListener) {
-        super(context, view, onReloadListener);
-    }
-
-    /**
-     * 这里传0,因为在初始化SuccessViewport时候,会将界面的View传递进来,作为当前的rootView
-     * @return
-     */
-    @Override
-    protected int onCreateView() {
-        return 0;
-    }
-
-    @Override
-    protected void initRetry(Context context, View view) {
-
-    }
-}

+ 0 - 0
kfzslibrary/src/main/java/com/kfzs/libs/widget/navigation/Navigation.java


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä