Explorar o código

1.修改支付页面
2.修改录音界面->上传完之后删除本地文件
3.鉴权接口
4.任务banner图片
5.退出app图片
6.退出登录图片
7.接入百度sdk
8.所有页面增加百度sdk监听方法

FailedToRead %!s(int64=2) %!d(string=hai) anos
pai
achega
423f8f09b7
Modificáronse 69 ficheiros con 1922 adicións e 365 borrados
  1. 10 0
      .idea/jarRepositories.xml
  2. 10 7
      .idea/misc.xml
  3. 14 0
      app/build.gradle
  4. 0 17
      app/src/fragmentRecommend/drawable/slidevideo_switch_track.xml
  5. 0 17
      app/src/fragmentRecommend/drawable/slidevideo_switch_track_s.xml
  6. 0 8
      app/src/fragmentRecommend/drawable/slidevideo_switch_track_selector.xml
  7. 20 0
      app/src/fragmentRecommend/drawable/switch_thumb.xml
  8. 1 2
      app/src/fragmentUser/layout/popupwindow_exit_login.xml
  9. 36 0
      app/src/main/java/com/edufound/reader/activity/CommentActivity.java
  10. 37 0
      app/src/main/java/com/edufound/reader/activity/CrashDialogActivity.java
  11. 37 0
      app/src/main/java/com/edufound/reader/activity/CustomerServiceActivity.java
  12. 47 6
      app/src/main/java/com/edufound/reader/activity/LoginAlertActivity.java
  13. 34 0
      app/src/main/java/com/edufound/reader/activity/MainActivity.java
  14. 36 0
      app/src/main/java/com/edufound/reader/activity/MessageActivity.java
  15. 36 0
      app/src/main/java/com/edufound/reader/activity/MyCollectionActivity.java
  16. 35 0
      app/src/main/java/com/edufound/reader/activity/MyFollowActivity.java
  17. 37 1
      app/src/main/java/com/edufound/reader/activity/OthersRecordActivity.java
  18. 52 22
      app/src/main/java/com/edufound/reader/activity/PayActivity.java
  19. 37 0
      app/src/main/java/com/edufound/reader/activity/RecordActivity.java
  20. 36 0
      app/src/main/java/com/edufound/reader/activity/SafflowerActivity.java
  21. 38 2
      app/src/main/java/com/edufound/reader/activity/SmallFullVideoActivity.java
  22. 68 24
      app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java
  23. 37 0
      app/src/main/java/com/edufound/reader/activity/WebActivity.java
  24. 5 2
      app/src/main/java/com/edufound/reader/adapter/MessageItemAdapter.java
  25. 8 0
      app/src/main/java/com/edufound/reader/adapter/SlideVideoAdapter.java
  26. 1 2
      app/src/main/java/com/edufound/reader/adapter/SlideVideoDanMarqueenAdapter.java
  27. 37 0
      app/src/main/java/com/edufound/reader/apiserver/OrderApiServerImpl.java
  28. 21 0
      app/src/main/java/com/edufound/reader/application/EApplication.java
  29. 76 0
      app/src/main/java/com/edufound/reader/base/BaseActivity.java
  30. 78 0
      app/src/main/java/com/edufound/reader/base/BaseFragment.java
  31. 16 0
      app/src/main/java/com/edufound/reader/bean/ChannelCode.java
  32. 104 0
      app/src/main/java/com/edufound/reader/bean/PayResultBean.java
  33. 20 0
      app/src/main/java/com/edufound/reader/botsdk/BotConstants.java
  34. 132 0
      app/src/main/java/com/edufound/reader/botsdk/BotMessageListener.java
  35. 24 0
      app/src/main/java/com/edufound/reader/botsdk/BotRegisterListener.java
  36. 73 0
      app/src/main/java/com/edufound/reader/botsdk/BotSDKUtils.java
  37. 37 0
      app/src/main/java/com/edufound/reader/botsdk/IBotIntentCallback.java
  38. 7 0
      app/src/main/java/com/edufound/reader/contract/MyTabFragmentContract.java
  39. 2 0
      app/src/main/java/com/edufound/reader/contract/OthersRecordContract.java
  40. 10 0
      app/src/main/java/com/edufound/reader/contract/PayContract.java
  41. 40 1
      app/src/main/java/com/edufound/reader/fragment/CharacterFragment.java
  42. 54 9
      app/src/main/java/com/edufound/reader/fragment/MyTabFragment.java
  43. 37 0
      app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java
  44. 1 0
      app/src/main/java/com/edufound/reader/model/MyTabFragmentModel.java
  45. 4 1
      app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java
  46. 1 1
      app/src/main/java/com/edufound/reader/presenter/CharacterFragmentPresenter.java
  47. 1 1
      app/src/main/java/com/edufound/reader/presenter/MyCollectionPresenter.java
  48. 61 4
      app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java
  49. 8 2
      app/src/main/java/com/edufound/reader/presenter/OthersRecordPresenter.java
  50. 103 0
      app/src/main/java/com/edufound/reader/presenter/PayPresenter.java
  51. 1 0
      app/src/main/java/com/edufound/reader/presenter/RecommendFragmentPresenter.java
  52. 6 2
      app/src/main/java/com/edufound/reader/presenter/RecordPresenter.java
  53. 15 7
      app/src/main/java/com/edufound/reader/services/RecordServices.java
  54. 140 0
      app/src/main/java/com/edufound/reader/util/DataCleanManager.java
  55. 9 2
      app/src/main/java/com/edufound/reader/util/EfunboxUtil.java
  56. 5 1
      app/src/main/java/com/edufound/reader/util/HttpInterceptor.java
  57. 1 1
      app/src/main/java/com/edufound/reader/util/OkHttpClient.java
  58. BIN=BIN
      app/src/main/res/drawable/close_icon.png
  59. BIN=BIN
      app/src/main/res/drawable/seekbar_thumb.png
  60. 2 2
      app/src/main/res/layout/activity_comment.xml
  61. 1 214
      app/src/main/res/layout/activity_pay.xml
  62. 115 0
      app/src/main/res/layout/activity_pay_item.xml
  63. 1 1
      app/src/main/res/layout/adapter_item_message.xml
  64. 1 1
      app/src/main/res/layout/adapter_item_slidevideo.xml
  65. 1 2
      app/src/main/res/layout/fragment_main_character.xml
  66. 1 1
      app/src/main/res/layout/fragment_main_user.xml
  67. 1 2
      app/src/main/res/layout/popupwindow_exit_app.xml
  68. 2 0
      build.gradle
  69. 1 0
      gradle.properties

+ 10 - 0
.idea/jarRepositories.xml

@@ -41,5 +41,15 @@
       <option name="name" value="maven3" />
       <option name="url" value="https://maven.aliyun.com/repository/releases" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven3" />
+      <option name="name" value="maven3" />
+      <option name="url" value="https://dueros.baidu.com/maven/repository/maven-releases/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="https://dueros.baidu.com/maven/repository/maven-snapshots/" />
+    </remote-repository>
   </component>
 </project>

+ 10 - 7
.idea/misc.xml

@@ -23,7 +23,9 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/fragment_recommend_to_record_bg_rotation.xml" value="0.2203125" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/fragment_recommend_userhead_round.xml" value="0.26197916666666665" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/slidevideo_switch_track.xml" value="0.32734375" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/slidevideo_switch_track_s.xml" value="0.37890625" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/slidevideo_switch_track_selector.xml" value="0.32734375" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/drawable/switch_thumb.xml" value="0.37890625" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/layout/fragment_main_recommend.xml" value="1.0" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/layout/popup_myorder.xml" value="0.2889294403892944" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/fragmentRecommend/layout/popupwindow_myorder.xml" value="0.2889294403892944" />
@@ -54,18 +56,19 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/main_left_tab_recommend_selector.xml" value="0.32421875" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/player_seekbar_list.xml" value="0.2713541666666667" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/drawable/popupwindow_select_grade_griditem_divder.xml" value="0.5048828125" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_alert_login.xml" value="0.5" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_comment.xml" value="0.18" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_alert_login.xml" value="0.22" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_comment.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_crash_dialog.xml" value="0.12" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_customerservice.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_main.xml" value="0.15" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_message.xml" value="0.14" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_otherrecord.xml" value="0.303125" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_pay.xml" value="0.25" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_pay.xml" value="0.5" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_pay_item.xml" value="0.5" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_record.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_saffloer.xml" value="0.22" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_saffloer_sign_layout_item.xml" value="0.5" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_userinfo_setting.xml" value="0.30585683297180044" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_userinfo_setting.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_video.xml" value="0.18824087245139876" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/activity_web.xml" value="0.2731143552311436" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_comment.xml" value="0.5" />
@@ -73,11 +76,11 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_message.xml" value="0.22" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_myfollow.xml" value="1.0" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_myollow.xml" value="0.25" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_popupwindow_myorder.xml" value="0.5" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_popupwindow_myorder.xml" value="0.22" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_record.xml" value="0.4539641943734015" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_record_user.xml" value="0.67" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_safflower.xml" value="0.67" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_slidevideo.xml" value="0.25" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/adapter_item_slidevideo.xml" value="3.0" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/anim_getfollow.xml" value="0.75" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/curjzplayer_controller.xml" value="0.16" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/cusjzplayer_controller.xml" value="0.5029154518950437" />
@@ -87,7 +90,7 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/fragment_user_rv_bottom.xml" value="0.30103359173126615" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/fragment_user_rv_header.xml" value="0.2" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/lifecycle_exception.xml" value="0.2396593673965937" />
-        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/player_controller.xml" value="0.13" />
+        <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/player_controller.xml" value="0.22" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/popupwindow_comment.xml" value="0.16" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/popupwindow_exit_app.xml" value="0.25" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/popupwindow_record_status.xml" value="0.33" />

+ 14 - 0
app/build.gradle

@@ -84,6 +84,14 @@ android {
                     appIcon: "@drawable/icon",
             ]
         }
+        //百度(小度音响)
+        channel_baidu {
+            signingConfig signingConfigs.efunbox
+            manifestPlaceholders = [
+                    appCode: "2017",
+                    appIcon: "@drawable/icon",
+            ]
+        }
     }
     productFlavors.all {
         flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: manifestPlaceholders.appCode, icon: manifestPlaceholders.appIcon]
@@ -146,4 +154,10 @@ dependencies {
 
     //解除Android P 反射机制
     implementation 'com.github.tiann:FreeReflection:3.1.0'
+
+
+    //百度(小度音响SDK)
+    implementation 'com.baidu.duer.botsdk:bot-sdk-android:1.56.1'
+    // 3rd Party
+    implementation "com.alibaba:fastjson:${FASTJSON_VERSION}"
 }

+ 0 - 17
app/src/fragmentRecommend/drawable/slidevideo_switch_track.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <padding
-            android:bottom="1dp"
-            android:left="4dp"
-            android:right="2dp"
-            android:top="1dp" />
-
-    <size android:height="30dp"></size>
-    <corners android:radius="20dp" />
-    <!-- 变化率 -->
-    <gradient
-            android:endColor="@color/red"
-            android:startColor="@color/red" />
-</shape>

+ 0 - 17
app/src/fragmentRecommend/drawable/slidevideo_switch_track_s.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <padding
-            android:bottom="1dp"
-            android:left="2dp"
-            android:right="2dp"
-            android:top="1dp" />
-
-    <size android:height="30dp"></size>
-    <corners android:radius="20dp" />
-    <!-- 变化率 -->
-    <gradient
-            android:endColor="@color/yellow"
-            android:startColor="@color/yellow" />
-</shape>

+ 0 - 8
app/src/fragmentRecommend/drawable/slidevideo_switch_track_selector.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:drawable="@drawable/slidevideo_switch_track_s" android:state_checked="true" />
-    <item android:drawable="@drawable/slidevideo_switch_track" android:state_checked="false" />
-
-</selector>

+ 20 - 0
app/src/fragmentRecommend/drawable/switch_thumb.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true">
+        <shape>
+            <size android:width="30dp" android:height="30dp" />
+            <corners android:radius="20dp" />
+            <solid android:color="#ffffff" />
+            <stroke android:width="2dp" android:color="@color/yellow" />
+        </shape>
+    </item>
+
+    <item>
+        <shape>
+            <size android:width="30dp" android:height="30dp" />
+            <corners android:radius="20dp" />
+            <solid android:color="@color/white" />
+            <stroke android:width="2dp" android:color="#a0a0a0" />
+        </shape>
+    </item>
+</selector>

+ 1 - 2
app/src/fragmentUser/layout/popupwindow_exit_login.xml

@@ -33,8 +33,7 @@
                     <ImageView
                             android:id="@+id/popupwindow_exit_login_image"
                             android:layout_width="match_parent"
-                            android:layout_height="match_parent"
-                            android:src="@color/blueviolet"></ImageView>
+                            android:layout_height="match_parent"></ImageView>
 
                     <TextView
                             android:layout_width="wrap_content"

+ 36 - 0
app/src/main/java/com/edufound/reader/activity/CommentActivity.java

@@ -16,6 +16,8 @@ import android.widget.Space;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
@@ -25,7 +27,11 @@ import com.edufound.reader.util.Consts;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class CommentActivity extends BaseMvpActivity<CommentPresenter> implements CommentContract.View {
 
@@ -170,6 +176,36 @@ public class CommentActivity extends BaseMvpActivity<CommentPresenter> implement
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public void getCommentAllSuccess() {
         mPresenter.initComment(mRecyclerView, mNoCommentLayout);
     }

+ 37 - 0
app/src/main/java/com/edufound/reader/activity/CrashDialogActivity.java

@@ -5,12 +5,19 @@ import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.view.ViewGroup;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.CrashDialogContract;
 import com.edufound.reader.presenter.CrashDialogPresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
+
 public class CrashDialogActivity extends BaseMvpActivity<CrashDialogPresenter> implements CrashDialogContract.View {
 
     Activity mActivity;
@@ -81,4 +88,34 @@ public class CrashDialogActivity extends BaseMvpActivity<CrashDialogPresenter> i
     public ViewGroup getRootView() {
         return findViewById(android.R.id.content);
     }
+
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
 }

+ 37 - 0
app/src/main/java/com/edufound/reader/activity/CustomerServiceActivity.java

@@ -4,6 +4,8 @@ import android.app.Activity;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
@@ -11,6 +13,11 @@ import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.CustomerServiceContract;
 import com.edufound.reader.presenter.CustomerServicePresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
+
 public class CustomerServiceActivity extends BaseMvpActivity<CustomerServicePresenter> implements CustomerServiceContract.View {
 
     Activity mActivity;
@@ -73,4 +80,34 @@ public class CustomerServiceActivity extends BaseMvpActivity<CustomerServicePres
     public ViewGroup getRootView() {
         return findViewById(android.R.id.content);
     }
+
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
 }

+ 47 - 6
app/src/main/java/com/edufound/reader/activity/LoginAlertActivity.java

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Context;
 import android.os.Process;
+import android.view.View;
 import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.CompoundButton;
@@ -13,6 +14,8 @@ import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
@@ -23,8 +26,12 @@ import com.edufound.reader.util.Consts;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.jakewharton.rxbinding4.widget.RxTextView;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.appcompat.widget.AppCompatCheckBox;
 import androidx.constraintlayout.widget.ConstraintLayout;
+import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.functions.Consumer;
 
 public class LoginAlertActivity extends BaseMvpActivity<LoginAlertPresenter> implements LoginAlertContract.View {
@@ -64,6 +71,7 @@ public class LoginAlertActivity extends BaseMvpActivity<LoginAlertPresenter> imp
         mPresenter.initServiceText(mServiceText);
         addUiClickListener(mCloseImg, o -> {
             finish();
+            hideSoftInput(mGetVCode);
         });
         addUiClickListener(mGetVCode, o -> {
             mPresenter.getVCode(mEditPhone.getText().toString());
@@ -85,16 +93,12 @@ public class LoginAlertActivity extends BaseMvpActivity<LoginAlertPresenter> imp
 
         RxView.focusChanges(mEditPhone).subscribe(hasFocus -> {
             if (!hasFocus) {
-                InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
-                if (manager != null)
-                    manager.hideSoftInputFromWindow(mEditPhone.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+                hideSoftInput(mEditPhone);
             }
         });
         RxView.focusChanges(mEditVCode).subscribe(hasFocus -> {
             if (!hasFocus) {
-                InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
-                if (manager != null)
-                    manager.hideSoftInputFromWindow(mEditVCode.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+                hideSoftInput(mEditVCode);
             }
         });
     }
@@ -165,4 +169,41 @@ public class LoginAlertActivity extends BaseMvpActivity<LoginAlertPresenter> imp
     public ViewGroup getRootView() {
         return findViewById(android.R.id.content);
     }
+
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    private void hideSoftInput(View view) {
+        InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
+        if (manager != null) {
+            manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+    }
 }

+ 34 - 0
app/src/main/java/com/edufound/reader/activity/MainActivity.java

@@ -7,6 +7,8 @@ import android.view.ViewGroup;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
@@ -31,8 +33,10 @@ import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
+import androidx.annotation.NonNull;
 import cn.jzvd.Jzvd;
 import cn.jzvd.JzvdStd;
+import io.reactivex.rxjava3.annotations.Nullable;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
@@ -153,6 +157,36 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
         return findViewById(android.R.id.content);
     }
 
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
 
     @Override
     public void setCheckIndex() {

+ 36 - 0
app/src/main/java/com/edufound/reader/activity/MessageActivity.java

@@ -6,6 +6,8 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
@@ -13,7 +15,11 @@ import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.MessageContract;
 import com.edufound.reader.presenter.MessagePresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class MessageActivity extends BaseMvpActivity<MessagePresenter> implements MessageContract.View {
 
@@ -93,6 +99,36 @@ public class MessageActivity extends BaseMvpActivity<MessagePresenter> implement
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public ImageView getNoMessage() {
         return mNoMessage;
     }

+ 36 - 0
app/src/main/java/com/edufound/reader/activity/MyCollectionActivity.java

@@ -5,6 +5,8 @@ import android.os.Build;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
@@ -12,8 +14,12 @@ import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.MyCollectionContract;
 import com.edufound.reader.presenter.MyCollectionPresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.recyclerview.widget.RecyclerView;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class MyCollectionActivity extends BaseMvpActivity<MyCollectionPresenter> implements MyCollectionContract.View {
 
@@ -91,6 +97,36 @@ public class MyCollectionActivity extends BaseMvpActivity<MyCollectionPresenter>
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public ImageView getNoCollectionImg() {
         return mNoCollection;
     }

+ 35 - 0
app/src/main/java/com/edufound/reader/activity/MyFollowActivity.java

@@ -6,6 +6,8 @@ import android.os.Build;
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
@@ -17,6 +19,9 @@ import com.edufound.reader.presenter.MyCollectionPresenter;
 import com.edufound.reader.presenter.MyFollowPresenter;
 import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.recyclerview.widget.RecyclerView;
@@ -90,6 +95,36 @@ public class MyFollowActivity extends BaseMvpActivity<MyFollowPresenter> impleme
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @io.reactivex.rxjava3.annotations.Nullable String msg, String token) {
+
+    }
+
+    @Override
     public ImageView getNoFollow() {
         return mNoFollow;
     }

+ 37 - 1
app/src/main/java/com/edufound/reader/activity/OthersRecordActivity.java

@@ -16,6 +16,8 @@ import android.widget.Space;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
@@ -31,8 +33,12 @@ import com.jakewharton.rxbinding4.view.RxView;
 import com.jakewharton.rxbinding4.widget.RxCompoundButton;
 import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.widget.AppCompatCheckBox;
+import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.functions.Consumer;
 
 public class OthersRecordActivity extends BaseMvpActivity<OthersRecordPresenter> implements OthersRecordContract.View {
@@ -113,7 +119,7 @@ public class OthersRecordActivity extends BaseMvpActivity<OthersRecordPresenter>
         Bundle params = getIntent().getBundleExtra("params_bundle");
         intoPage = params.getString("intoPage", "default");
         mOtherId = params.getString("other_uid");
-        Logger.e("mOtherId:" + mOtherId);
+        mPresenter.setBackRecordId(params.getString("record_id"));
         mPresenter.getOtherRecordList(mOtherId);
         mPresenter.getOtherUserInfo(mOtherId);
     }
@@ -133,6 +139,36 @@ public class OthersRecordActivity extends BaseMvpActivity<OthersRecordPresenter>
 
     }
 
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
 
     @Override
     public void showLoading() {

+ 52 - 22
app/src/main/java/com/edufound/reader/activity/PayActivity.java

@@ -4,8 +4,11 @@ import android.app.Activity;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
@@ -14,6 +17,12 @@ import com.edufound.reader.contract.PayContract;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.presenter.PayPresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
+import io.reactivex.rxjava3.functions.Consumer;
+
 public class PayActivity extends BaseMvpActivity<PayPresenter> implements PayContract.View {
 
     Activity mActivity;
@@ -24,17 +33,8 @@ public class PayActivity extends BaseMvpActivity<PayPresenter> implements PayCon
     @BindView(id = R.id.activity_pay_back)
     ImageView mBack;
 
-    @BindView(id = R.id.activity_pay_month_item)
-    ViewGroup mMonthItem;
-
-    @BindView(id = R.id.activity_pay_year_item)
-    ViewGroup mYearItem;
-
-    @BindView(id = R.id.activity_pay_month_item_check)
-    ImageView mMonthCheck;
-
-    @BindView(id = R.id.activity_pay_year_item_check)
-    ImageView mYearCheck;
+    @BindView(id = R.id.activity_pay_item_layouts)
+    LinearLayout mItemFrame;
 
     @Override
     public int getLayoutId() {
@@ -49,21 +49,11 @@ public class PayActivity extends BaseMvpActivity<PayPresenter> implements PayCon
         addUiClickListener(mBack, o -> {
             mActivity.finish();
         });
-        mYearCheck.setVisibility(View.INVISIBLE);
-        mMonthCheck.setVisibility(View.INVISIBLE);
         addUiClickListener(mToMyOrder, o -> {
             Toast.makeText(mActivity, "to my order", Toast.LENGTH_SHORT).show();
             PopWindowUtil.showMyOrderWindow(mActivity, getRootView());
         });
-        addUiClickListener(mYearItem, o -> {
-            mMonthCheck.setVisibility(View.INVISIBLE);
-            mYearCheck.setVisibility(View.VISIBLE);
-        });
-        addUiClickListener(mMonthItem, o -> {
-            mYearCheck.setVisibility(View.INVISIBLE);
-            mMonthCheck.setVisibility(View.VISIBLE);
-        });
-        mYearItem.performClick();
+        mPresenter.getProductInfo();
     }
 
     @Override
@@ -105,4 +95,44 @@ public class PayActivity extends BaseMvpActivity<PayPresenter> implements PayCon
     public ViewGroup getRootView() {
         return findViewById(android.R.id.content);
     }
+
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
+    public void getProductSuccess() {
+        mPresenter.initPayItem(mItemFrame);
+    }
+
+    @Override
+    public void addUiClick(View view, Consumer onNext) {
+        addUiClickListener(view, onNext);
+    }
 }

+ 37 - 0
app/src/main/java/com/edufound/reader/activity/RecordActivity.java

@@ -10,6 +10,8 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
@@ -17,6 +19,11 @@ import com.edufound.reader.contract.RecordContract;
 import com.edufound.reader.cusview.RvListJzvdStd;
 import com.edufound.reader.presenter.RecordPresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
+
 public class RecordActivity extends BaseMvpActivity<RecordPresenter> implements RecordContract.View {
 
     Activity mActivity;
@@ -140,6 +147,36 @@ public class RecordActivity extends BaseMvpActivity<RecordPresenter> implements
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public void refRecordStatus() {
         //正在朗读
         mMikeAnim.stop();

+ 36 - 0
app/src/main/java/com/edufound/reader/activity/SafflowerActivity.java

@@ -7,13 +7,19 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.contract.SafflowerContract;
 import com.edufound.reader.presenter.SafflowerPresenter;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class SafflowerActivity extends BaseMvpActivity<SafflowerPresenter> implements SafflowerContract.View {
 
@@ -67,6 +73,36 @@ public class SafflowerActivity extends BaseMvpActivity<SafflowerPresenter> imple
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public void showLoading() {
 
     }

+ 38 - 2
app/src/main/java/com/edufound/reader/activity/SmallFullVideoActivity.java

@@ -7,6 +7,8 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
@@ -15,8 +17,12 @@ import com.edufound.reader.presenter.SmallFullVideoPresenter;
 import com.edufound.reader.util.MMKVUtil;
 import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import cn.jzvd.Jzvd;
 import cn.jzvd.JzvdStd;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class SmallFullVideoActivity extends BaseMvpActivity<SmallFullVideoPresenter> implements SmallFullVideoContract.View {
 
@@ -44,7 +50,7 @@ public class SmallFullVideoActivity extends BaseMvpActivity<SmallFullVideoPresen
         int index = Integer.valueOf(params.getString("index"));
         String dataJson = params.getString("dataJson");
         if (dataJson.equals("getmmkv")) {
-            dataJson = MMKVUtil.getInstance().decodeString("example_video");
+            dataJson = MMKVUtil.getInstance().decodeString("video_data");
         }
         mPresenter.initFragment(index, dataJson);
     }
@@ -64,6 +70,36 @@ public class SmallFullVideoActivity extends BaseMvpActivity<SmallFullVideoPresen
 
     }
 
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
 
     @Override
     public void showLoading() {
@@ -92,7 +128,7 @@ public class SmallFullVideoActivity extends BaseMvpActivity<SmallFullVideoPresen
 
     @Override
     protected void onDestroy() {
-        MMKVUtil.getInstance().removeKey("getmmkv");
+        MMKVUtil.getInstance().removeKey("video_data");
         super.onDestroy();
     }
 

+ 68 - 24
app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java

@@ -16,11 +16,13 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseMvpActivity;
-import com.edufound.reader.bean.MyInfoBean;
+import com.edufound.reader.bean.ChannelCode;
 import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.UserInfoSettingContract;
 import com.edufound.reader.listener.PopUtilClickListener;
@@ -29,12 +31,13 @@ import com.edufound.reader.presenter.UserInfoSettingPresenter;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
-import com.edufound.reader.util.MMKVEncodeKey;
-import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.SizeUtils;
 import com.jakewharton.rxbinding4.view.RxView;
-import com.jakewharton.rxbinding4.widget.RxTextView;
-import com.orhanobut.logger.Logger;
+
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPresenter> implements UserInfoSettingContract.View {
 
@@ -81,6 +84,7 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
         mPresenter = new UserInfoSettingPresenter();
         mPresenter.attachView(this);
         addUiClickListener(mBack, o -> {
+            hideSoftInput();
             mActivity.finish();
         });
         addUiClickListener(mLoginOut, o -> {
@@ -108,6 +112,15 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             getActivity().startActivity(intent);
         });
 
+        if (Consts.getUmengChannel().equals(ChannelCode.BAIDU.getChannelCode())) {
+            //百度渠道,隐藏注销和退出登录按钮
+            mCancellationLayout.setVisibility(View.GONE);
+            mLoginOut.setVisibility(View.GONE);
+        } else if (Consts.getUmengChannel().equals(ChannelCode.YIFANG.getChannelCode())) {
+            //义方渠道
+            mCancellationLayout.setVisibility(View.VISIBLE);
+            mLoginOut.setVisibility(View.VISIBLE);
+        }
         addUiClickListener(mCancellationLayout, o -> {
             PopWindowUtil.showCancellationAccountWindow(mActivity, getRootView(), new PopUtilClickListener() {
                 @Override
@@ -168,34 +181,28 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
                 }
             });
         });
-//        RxView.focusChanges(mNickName).subscribe(hasFocus -> {
-//            if (!hasFocus) {
-//                if (TextUtils.isEmpty(mNickName.getText().toString())) {
+        RxView.focusChanges(mNickName).subscribe(hasFocus -> {
+            if (!hasFocus) {
+                if (TextUtils.isEmpty(mNickName.getText().toString())) {
 //                    Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show();
-//                    return;
-//                }
-//                InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
-//                if (manager != null) {
-//                    manager.hideSoftInputFromWindow(mNickName.getWindowToken(), 0);
-//                }
-//                Consts.getmConstsUserBean().setNickName(mNickName.getText().toString().trim());
-//                mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
-//            }
-//
-//        });
+                    return;
+                }
+                hideSoftInput();
+
+                Consts.getmConstsUserBean().setNickName(mNickName.getText().toString().trim());
+                mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
+            }
+
+        });
         mNickName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
             @Override
             public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                 if (actionId == KeyEvent.ACTION_DOWN || actionId == EditorInfo.IME_ACTION_DONE) {
-                    Logger.e("setOnEditorActionListener");
                     if (TextUtils.isEmpty(mNickName.getText().toString())) {
                         Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show();
                         return true;
                     }
-                    InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
-                    if (manager != null) {
-                        manager.hideSoftInputFromWindow(mNickName.getWindowToken(), 0);
-                    }
+                    hideSoftInput();
                     Consts.getmConstsUserBean().setNickName(mNickName.getText().toString().trim());
                     mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
                     mNickName.clearFocus();
@@ -208,6 +215,13 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
         mPresenter.getMyInfo();
     }
 
+    private void hideSoftInput() {
+        InputMethodManager manager = ((InputMethodManager) Consts.getmApplicAtion().getSystemService(Context.INPUT_METHOD_SERVICE));
+        if (manager != null) {
+            manager.hideSoftInputFromWindow(mNickName.getWindowToken(), 0);
+        }
+    }
+
     @Override
     public void onGetDisconnect() {
 
@@ -223,6 +237,36 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
 
     }
 
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
 
     @Override
     public void showLoading() {

+ 37 - 0
app/src/main/java/com/edufound/reader/activity/WebActivity.java

@@ -7,6 +7,8 @@ import android.webkit.WebView;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
@@ -14,6 +16,11 @@ import com.edufound.reader.contract.WebContract;
 import com.edufound.reader.presenter.WebPresenter;
 import com.edufound.reader.util.Consts;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
+
 public class WebActivity extends BaseMvpActivity<WebPresenter> implements WebContract.View {
 
 
@@ -78,4 +85,34 @@ public class WebActivity extends BaseMvpActivity<WebPresenter> implements WebCon
     public ViewGroup getRootView() {
         return findViewById(android.R.id.content);
     }
+
+    @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
 }

+ 5 - 2
app/src/main/java/com/edufound/reader/adapter/MessageItemAdapter.java

@@ -58,11 +58,13 @@ public class MessageItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
     @Override
     public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
         ((MessageItemHolder) holder).mItemTime.setText(TimeUtil.timeStamp2Date(Long.valueOf(mListData.get(position).getGmtCreated()), "yyyy年MM月dd日 HH:mm"));
-        if (mListData.get(position).getContent().length() > 55) {
-            ((MessageItemHolder) holder).mItemContent.setText(((MessageItemHolder) holder).mItemContent.getText().toString().substring(0, 55));
+        if (mListData.get(position).getContent().length() > 50 && ((MessageItemHolder) holder).isShowALl == false) {
+            ((MessageItemHolder) holder).mItemContent.setText(mListData.get(position).getContent().substring(0, 50) + "...");
             RxView.clicks(((MessageItemHolder) holder).mItemLoadAll).throttleFirst(2, TimeUnit.SECONDS).subscribe(o -> {
+                ((MessageItemHolder) holder).mItemContent.setText("");
                 ((MessageItemHolder) holder).mItemContent.setText(mListData.get(position).getContent());
                 ((MessageItemHolder) holder).mItemLoadAll.setVisibility(View.INVISIBLE);
+                ((MessageItemHolder) holder).isShowALl = true;
                 //已读操作
                 if (mItemClick != null) {
                     mItemClick.onClickListener(position, holder.itemView, mListData.get(position).getId());
@@ -99,6 +101,7 @@ class MessageItemHolder extends RecyclerView.ViewHolder {
     TextView mItemTime;
     TextView mItemContent;
     TextView mItemLoadAll;
+    boolean isShowALl = false;
 
     public MessageItemHolder(@NonNull View itemView) {
         super(itemView);

+ 8 - 0
app/src/main/java/com/edufound/reader/adapter/SlideVideoAdapter.java

@@ -129,6 +129,14 @@ class VideoHolder extends RecyclerView.ViewHolder {
             public void onSuccess(HttpInfo info) throws IOException {
                 HttpResultBean<HttpResultDataListBean<CommentListBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<CommentListBean>>>() {
                 }.getType());
+
+                Logger.e("弹幕:" + bean.getData().getList().size());
+                if (bean.getData().getList() == null || bean.getData().getList().size() == 0) {
+                    Logger.e("没有弹幕");
+                    mSwitch.setVisibility(View.INVISIBLE);
+                    return;
+                }
+                mSwitch.setVisibility(View.VISIBLE);
                 SlideVideoDanMarqueenAdapter adapter = new SlideVideoDanMarqueenAdapter(mContext, bean.getData().getList());
                 mMarqueen.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
                 mMarqueen.addItemDecoration(new SpacesItemDecoration(SizeUtils.dp2px(mContext, 20)));

+ 1 - 2
app/src/main/java/com/edufound/reader/adapter/SlideVideoDanMarqueenAdapter.java

@@ -33,9 +33,8 @@ public class SlideVideoDanMarqueenAdapter extends RecyclerView.Adapter<MarqueenH
 
     @Override
     public void onBindViewHolder(MarqueenHolder holder, int position) {
-//        String data = mData.get(position % mData.size());
         if (mData.size() > 0) {
-            holder.mMarqueenText.setText(mData.get(position % mData.size()).getDetailDesc() + "---" + mData.get(position % mData.size()).getColumnNames());
+            holder.mMarqueenText.setText(mData.get(position % mData.size()).getDetailDesc());
         }
     }
 

+ 37 - 0
app/src/main/java/com/edufound/reader/apiserver/OrderApiServerImpl.java

@@ -0,0 +1,37 @@
+package com.edufound.reader.apiserver;
+
+import android.app.Activity;
+
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.OkHttpClient;
+import com.okhttplib.HttpInfo;
+import com.okhttplib.callback.Callback;
+
+public class OrderApiServerImpl implements OrderApiServer {
+
+    private final String API = Consts.getFinalApi();
+
+    @Override
+    public void isBuy(Activity activity, Callback callback) {
+        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/order/isBuy"), callback);
+
+    }
+
+    @Override
+    public void getProductInfo(Activity activity, String channel, Callback callback) {
+        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/order/product").addParam("channel", channel), callback);
+    }
+
+    @Override
+    public void getAuth(Activity activity, Callback callback) {
+        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/auth"), callback);
+    }
+}
+
+interface OrderApiServer {
+    void isBuy(Activity activity, Callback callback);
+
+    void getAuth(Activity activity, Callback callback);
+
+    void getProductInfo(Activity activity, String channel, Callback callback);
+}

+ 21 - 0
app/src/main/java/com/edufound/reader/application/EApplication.java

@@ -12,7 +12,14 @@ import android.os.Handler;
 import android.os.Looper;
 import android.widget.Toast;
 
+import com.baidu.duer.botsdk.BotSdk;
+import com.baidu.duer.botsdk.util.HeartBeatReporter;
+import com.edufound.reader.BuildConfig;
 import com.edufound.reader.R;
+import com.edufound.reader.bean.ChannelCode;
+import com.edufound.reader.botsdk.BotConstants;
+import com.edufound.reader.botsdk.BotMessageListener;
+import com.edufound.reader.botsdk.BotSDKUtils;
 import com.edufound.reader.support.CrashLog;
 import com.edufound.reader.support.DebugSafeModeTipActivity;
 import com.edufound.reader.support.DebugSafeModeUI;
@@ -83,6 +90,20 @@ public class EApplication extends Application {
             Logger.e("Consts.uid:" + Consts.getUID());
             //初始化activity监听
 //            registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
+            if (Consts.getUmengChannel().equals(ChannelCode.BAIDU.getChannelCode())) {
+                /** 接入益智乐园的App,需要删掉下面这一行。保证益智乐园的付费等逻辑正常执行,不知道益智乐园是啥的,不要删掉这一行 */
+                HeartBeatReporter.getInstance().setShouldUploadHeartBeatByApp(false);
+                // 初始化BotSDK
+                BotSdk.getInstance().init(this);
+                // 打开BotSDK的Log开关,开发阶段建议打开Log开关,便于排查问题
+                BotSdk.enableLog(BuildConfig.DEBUG);
+                String random1 = BotConstants.RANDOM1_PREFIX + Math.random();
+                String random2 = BotConstants.RANDOM2_PREFIX + Math.random();
+                // 在线校验示例
+                BotSdk.getInstance().register(BotMessageListener.getInstance(), BotConstants.BOTID,
+                        random1, BotSDKUtils.sign(random1), random2, BotSDKUtils.sign(random2));
+
+            }
         } catch (XmlPullParserException e) {
             e.printStackTrace();
         }

+ 76 - 0
app/src/main/java/com/edufound/reader/base/BaseActivity.java

@@ -20,10 +20,19 @@ import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.view.animation.LinearInterpolator;
 import android.widget.FrameLayout;
+import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
+import com.baidu.duer.botsdk.BotSdk;
+import com.baidu.duer.botsdk.IAccountChargeMsgListener;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.application.EApplication;
+import com.edufound.reader.bean.ChannelCode;
+import com.edufound.reader.botsdk.BotMessageListener;
+import com.edufound.reader.botsdk.BotRegisterListener;
+import com.edufound.reader.botsdk.IBotIntentCallback;
 import com.edufound.reader.receiver.HomeKeyEventReceiver;
 import com.edufound.reader.receiver.NetworkChangeReceiver;
 import com.edufound.reader.util.Consts;
@@ -36,8 +45,10 @@ import com.jakewharton.rxbinding4.view.RxView;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.HashMap;
 import java.util.concurrent.TimeUnit;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.disposables.CompositeDisposable;
@@ -91,12 +102,15 @@ public abstract class BaseActivity extends AppCompatActivity {
         NetworkChangeReceiver.registerObserver(NetStateChangeObserver);
         //注册登录广播
         registerReceiver(loginReceiver, new IntentFilter(LOGIN_SUCCESS_ACTION));
+
+        BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
     }
 
 
     @Override
     protected void onDestroy() {
         super.onDestroy();
+        BotRegisterListener.removeListener(mBotIntentCallBack);
         clearDisposable();
         unregisterReceiver(mHomeReceiver);
         NetworkChangeReceiver.unRegisterReceiver(this);
@@ -187,6 +201,7 @@ public abstract class BaseActivity extends AppCompatActivity {
         public void onDisconnect() {
             //断网了
             onGetDisconnect();
+            Toast.makeText(Consts.getmApplicAtion(), "网络异常,请检查网络。", Toast.LENGTH_SHORT).show();
         }
 
         @Override
@@ -266,4 +281,65 @@ public abstract class BaseActivity extends AppCompatActivity {
         startActivityForResult(intent, resultCode);
     }
 
+
+    //百度的回调逻辑代码块
+    public abstract void botHandleIntent(BotIntent intent, String customData);
+
+    public abstract void botOnClickLink(String url, HashMap<String, String> paramMap);
+
+    public abstract void botOnHandleScreenNavigatorEvent(int event);
+
+    public abstract void botOnLinkAccountSucceed(String s, String s1);
+
+    public abstract void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount,
+                                                  AmountInfo capturedAmount, long creationTimestamp,
+                                                  String baiduOrderReferenceId, String sellerOrderId, String msg);
+
+    public abstract void botOnBuyStatusUpdated(@NonNull final String purchaseResult,
+                                               @NonNull final String productId,
+                                               @NonNull final String baiduOrderId,
+                                               @NonNull final String sellerOrderId, @Nullable final String msg, String token);
+
+    IBotIntentCallback mBotIntentCallBack = new IBotIntentCallback() {
+        @Override
+        public void handleIntent(BotIntent intent, String customData) {
+            botHandleIntent(intent, customData);
+        }
+
+        @Override
+        public void onClickLink(String url, HashMap<String, String> paramMap) {
+            botOnClickLink(url, paramMap);
+        }
+
+        @Override
+        public void onHandleScreenNavigatorEvent(int event) {
+            botOnHandleScreenNavigatorEvent(event);
+        }
+    };
+
+
+    IAccountChargeMsgListener mIAccountChargeMsgListener = new IAccountChargeMsgListener() {
+        @Override
+        public void onLinkAccountSucceed(String s, String s1) {
+            botOnLinkAccountSucceed(s, s1);
+        }
+
+        @Override
+        public void onChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount,
+                                          AmountInfo capturedAmount, long creationTimestamp,
+                                          String baiduOrderReferenceId, String sellerOrderId, String msg) {
+            botOnChargeStatusUpdated(purchaseResult, authorizationAmount, capturedAmount, creationTimestamp, baiduOrderReferenceId, sellerOrderId, msg);
+
+        }
+
+        @Override
+        public void onBuyStatusUpdated(@NonNull final String purchaseResult,
+                                       @NonNull final String productId,
+                                       @NonNull final String baiduOrderId,
+                                       @NonNull final String sellerOrderId, @Nullable final String msg, String token) {
+
+            botOnBuyStatusUpdated(purchaseResult, productId, baiduOrderId, sellerOrderId, msg, token);
+
+        }
+    };
 }

+ 78 - 0
app/src/main/java/com/edufound/reader/base/BaseFragment.java

@@ -1,16 +1,24 @@
 package com.edufound.reader.base;
 
 import android.annotation.SuppressLint;
+import android.content.Context;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
+import com.baidu.duer.botsdk.IAccountChargeMsgListener;
+import com.edufound.reader.botsdk.BotRegisterListener;
+import com.edufound.reader.botsdk.IBotIntentCallback;
 import com.edufound.reader.receiver.NetworkChangeReceiver;
 import com.jakewharton.rxbinding4.view.RxView;
 
+import java.util.HashMap;
 import java.util.concurrent.TimeUnit;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.disposables.CompositeDisposable;
@@ -39,6 +47,17 @@ public abstract class BaseFragment extends Fragment {
         return view;
     }
 
+    @Override
+    public void onAttach(@NonNull Context context) {
+        super.onAttach(context);
+        BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        BotRegisterListener.removeListener(mBotIntentCallBack);
+    }
 
     /**
      * 初始化视图
@@ -107,5 +126,64 @@ public abstract class BaseFragment extends Fragment {
         }
     };
 
+    //百度的回调逻辑代码块
+    public abstract void botHandleIntent(BotIntent intent, String customData);
+
+    public abstract void botOnClickLink(String url, HashMap<String, String> paramMap);
+
+    public abstract void botOnHandleScreenNavigatorEvent(int event);
+
+    public abstract void botOnLinkAccountSucceed(String s, String s1);
+
+    public abstract void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount,
+                                                  AmountInfo capturedAmount, long creationTimestamp,
+                                                  String baiduOrderReferenceId, String sellerOrderId, String msg);
 
+    public abstract void botOnBuyStatusUpdated(@NonNull final String purchaseResult,
+                                               @NonNull final String productId,
+                                               @NonNull final String baiduOrderId,
+                                               @NonNull final String sellerOrderId, @Nullable final String msg, String token);
+
+    IBotIntentCallback mBotIntentCallBack = new IBotIntentCallback() {
+        @Override
+        public void handleIntent(BotIntent intent, String customData) {
+            botHandleIntent(intent, customData);
+        }
+
+        @Override
+        public void onClickLink(String url, HashMap<String, String> paramMap) {
+            botOnClickLink(url, paramMap);
+        }
+
+        @Override
+        public void onHandleScreenNavigatorEvent(int event) {
+            botOnHandleScreenNavigatorEvent(event);
+        }
+    };
+
+
+    IAccountChargeMsgListener mIAccountChargeMsgListener = new IAccountChargeMsgListener() {
+        @Override
+        public void onLinkAccountSucceed(String s, String s1) {
+            botOnLinkAccountSucceed(s, s1);
+        }
+
+        @Override
+        public void onChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount,
+                                          AmountInfo capturedAmount, long creationTimestamp,
+                                          String baiduOrderReferenceId, String sellerOrderId, String msg) {
+            botOnChargeStatusUpdated(purchaseResult, authorizationAmount, capturedAmount, creationTimestamp, baiduOrderReferenceId, sellerOrderId, msg);
+
+        }
+
+        @Override
+        public void onBuyStatusUpdated(@NonNull final String purchaseResult,
+                                       @NonNull final String productId,
+                                       @NonNull final String baiduOrderId,
+                                       @NonNull final String sellerOrderId, @Nullable final String msg, String token) {
+
+            botOnBuyStatusUpdated(purchaseResult, productId, baiduOrderId, sellerOrderId, msg, token);
+
+        }
+    };
 }

+ 16 - 0
app/src/main/java/com/edufound/reader/bean/ChannelCode.java

@@ -0,0 +1,16 @@
+package com.edufound.reader.bean;
+
+public enum ChannelCode {
+    YIFANG {
+        public String getChannelCode() {//枚举对象实现抽象方法
+            return "2006";
+        }
+    },
+    BAIDU {
+        public String getChannelCode() {//枚举对象实现抽象方法
+            return "2017";
+        }
+    };
+
+    public abstract String getChannelCode();//定义抽象方法
+}

+ 104 - 0
app/src/main/java/com/edufound/reader/bean/PayResultBean.java

@@ -0,0 +1,104 @@
+package com.edufound.reader.bean;
+
+public class PayResultBean {
+    private String addDays;
+
+    private String channel;
+
+    private String firstPrice;
+
+    private String gmtCreated;
+
+    private String gmtModified;
+
+    private String id;
+
+    private String originPrice;
+
+    private String price;
+
+    private String status;
+
+    private String title;
+
+    public void setAddDays(String addDays) {
+        this.addDays = addDays;
+    }
+
+    public String getAddDays() {
+        return this.addDays;
+    }
+
+    public void setChannel(String channel) {
+        this.channel = channel;
+    }
+
+    public String getChannel() {
+        return this.channel;
+    }
+
+    public void setFirstPrice(String firstPrice) {
+        this.firstPrice = firstPrice;
+    }
+
+    public String getFirstPrice() {
+        return this.firstPrice;
+    }
+
+    public void setGmtCreated(String gmtCreated) {
+        this.gmtCreated = gmtCreated;
+    }
+
+    public String getGmtCreated() {
+        return this.gmtCreated;
+    }
+
+    public void setGmtModified(String gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getGmtModified() {
+        return this.gmtModified;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return this.id;
+    }
+
+    public void setOriginPrice(String originPrice) {
+        this.originPrice = originPrice;
+    }
+
+    public String getOriginPrice() {
+        return this.originPrice;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public String getPrice() {
+        return this.price;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getStatus() {
+        return this.status;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+}

+ 20 - 0
app/src/main/java/com/edufound/reader/botsdk/BotConstants.java

@@ -0,0 +1,20 @@
+package com.edufound.reader.botsdk;
+
+public class BotConstants {
+
+    public static final String LOG_TAG_AUDIO = "AudioRecorder";
+    public static final String LOG_TAG_CAMERA = "CameraDemo";
+    public static final String LOG_TAG_BOTSDK = "BotSDKDemo";
+
+    /**
+     * BotID和签名key ,可以在自己的技能控制台看到相关信息:https://dueros.baidu.com/dbp/main/console
+     */
+    public static final String BOTID = "a1d05eea-9baa-3a36-6c21-568f19c033bc";
+    public static final String SIGNATURE_KEY = "22e05783-5107-3191-45f1-3a49b426f10a";
+
+    // 两个随机值的前缀,这里对格式不作要求
+    public static final String RANDOM1_PREFIX = "efunboxreader1";
+    public static final String RANDOM2_PREFIX = "efunboxreader2";
+
+
+}

+ 132 - 0
app/src/main/java/com/edufound/reader/botsdk/BotMessageListener.java

@@ -0,0 +1,132 @@
+package com.edufound.reader.botsdk;
+
+import android.widget.Toast;
+
+import com.baidu.duer.botsdk.BotIdentity;
+import com.baidu.duer.botsdk.BotIntent;
+import com.baidu.duer.botsdk.IBotMessageListener;
+import com.edufound.reader.application.EApplication;
+import com.edufound.reader.util.Consts;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+
+
+public class BotMessageListener implements IBotMessageListener {
+
+    private final List<IBotIntentCallback> callbacks = new ArrayList<>();
+
+    private BotMessageListener() {
+    }
+
+    /**
+     * 添加意图监听
+     *
+     * @param botIntentCallback 被添加意图监听
+     */
+    public void addCallback(@NonNull final IBotIntentCallback botIntentCallback) {
+        callbacks.add(botIntentCallback);
+    }
+
+    /**
+     * 移除意图监听
+     *
+     * @param botIntentCallback 被移除的意图监听
+     */
+    public void removeCallback(@NonNull final IBotIntentCallback botIntentCallback) {
+        callbacks.remove(botIntentCallback);
+    }
+
+    /**
+     * 移除所有监听意图
+     */
+    public void clearCallback() {
+        callbacks.clear();
+    }
+
+    public static BotMessageListener getInstance() {
+        return Holder.INSTANCE;
+    }
+
+    private static class Holder {
+        private static final BotMessageListener INSTANCE = new BotMessageListener();
+    }
+
+    /**
+     * 意图下发。开发者在<a herf="">DBP平台</a>上面开发的意图,在匹配到对应用户query之后,会封装对应意图成为Intent下发下来。
+     * APP通过{@link BotIntent#name}来确定意图名称,之后开发对应的逻辑。同时APP还可以通过{@link BotIntent#slots}解析参数
+     *
+     * @param token      指令的token,token是一个场景的标识符,在打开的时候,token会塞到intent中,key为"bot:accessToken"
+     *                   可以通过token来区别这个指令是否是当前场景需要处理的指令
+     * @param identity   BotID参考,包含packageName和accessToken
+     * @param intent     意图内容,参考{@link BotIntent} 包含意图名称和槽位参数
+     * @param customData 自定义数据,结构化数据。参考 <a herf="http://icode.baidu.com/repos/baidu/duer/open-platform-api-doc/blob/master:dueros-conversational-service/device-interface/bot-app-sdk-private.md">BotSDK协议文档</a>
+     */
+    @Override
+    public void onHandleIntent(String token, BotIdentity identity, BotIntent intent, String customData) {
+        for (IBotIntentCallback callback : callbacks) {
+            callback.handleIntent(intent, customData);
+        }
+    }
+
+    /**
+     * ClickLink事件下发,ClickLink是一种Directive,用户新增自定义交互之后,云端会解析用户定义的交互,下发对应的指令
+     * 例如APP新增自定义交互样例{@code <"试一试",url>},用户query"试一试"
+     * 之后DuerOS会通过此接口下发 上面定义的url
+     * 如果用户引用系统内建自定义类型,用户query中可以包含参数,例如"输入北京",这个query中北京可以被解析成参数,放到后面paramMap中下发
+     * 系统内建类型参考:<a herf="https://github.com/dueros/AndroidBotSdkDemo">DCS type文档</a>
+     *
+     * @param url      自定义交互描述中的url
+     * @param paramMap 对于系统内建类型,参数列表。参数就是从query中通过分词取得的关键词。
+     */
+
+    @Override
+    public void onClickLink(String url, HashMap<String, String> paramMap) {
+        for (IBotIntentCallback callback : callbacks) {
+            callback.onClickLink(url, paramMap);
+        }
+
+    }
+
+    /**
+     * 处理屏幕导航事件
+     *
+     * @param event 屏幕导航事件值
+     */
+
+    @Override
+    public void onHandleScreenNavigatorEvent(int event) {
+        for (IBotIntentCallback callback : callbacks) {
+            callback.onHandleScreenNavigatorEvent(event);
+        }
+
+    }
+
+    @Override
+    public void onCloseRequested() {
+        EApplication.killAppProcess(Consts.getmApplicAtion());
+    }
+
+    @Override
+    public void onConnect() {
+
+    }
+
+    @Override
+    public void onDisconnect() {
+
+    }
+
+    @Override
+    public void onRegisterFailed(int i) {
+        Toast.makeText(Consts.getmApplicAtion(), "注册失败", Toast.LENGTH_LONG).show();
+    }
+
+    @Override
+    public void onRegisterSucceed() {
+        Toast.makeText(Consts.getmApplicAtion(), "注册百度sdk成功", Toast.LENGTH_LONG).show();
+    }
+}

+ 24 - 0
app/src/main/java/com/edufound/reader/botsdk/BotRegisterListener.java

@@ -0,0 +1,24 @@
+package com.edufound.reader.botsdk;
+
+import com.baidu.duer.botsdk.BotSdk;
+import com.baidu.duer.botsdk.IAccountChargeMsgListener;
+import com.edufound.reader.bean.ChannelCode;
+import com.edufound.reader.util.Consts;
+
+public class BotRegisterListener {
+    public static void registerListener(IBotIntentCallback iBotIntentCallback, IAccountChargeMsgListener iAccountChargeMsgListener) {
+        if (Consts.getUmengChannel().equals(ChannelCode.BAIDU.getChannelCode())) {
+            //如果是百度。就注册百度的接口
+            BotMessageListener.getInstance().addCallback(iBotIntentCallback);
+            BotSdk.getInstance().setAccountAndChargeListener(iAccountChargeMsgListener);
+        }
+    }
+
+    public static void removeListener(IBotIntentCallback iBotIntentCallback) {
+        if (Consts.getUmengChannel().equals(ChannelCode.BAIDU.getChannelCode())) {
+            //如果是百度。就删除百度
+            BotMessageListener.getInstance().removeCallback(iBotIntentCallback);
+            BotSdk.getInstance().setAccountAndChargeListener(null);
+        }
+    }
+}

+ 73 - 0
app/src/main/java/com/edufound/reader/botsdk/BotSDKUtils.java

@@ -0,0 +1,73 @@
+package com.edufound.reader.botsdk;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.annotations.Nullable;
+
+public class BotSDKUtils {
+
+    /**
+     * 获取输入info的MD5值
+     *
+     * @param s 输入字符串
+     * @return
+     */
+    @Nullable
+    public static String getMd5(@NonNull final String s) {
+        String result = null;
+        try {
+            MessageDigest md5 = MessageDigest.getInstance("MD5");
+            md5.update(s.getBytes("UTF-8"));
+            byte[] md5Array = md5.digest();
+            result = byteToHex(md5Array);
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * byte to Hex String
+     *
+     * @param md5Array md5Array
+     * @return hex String
+     */
+    @NonNull
+    public static String byteToHex(@NonNull byte[] md5Array) {
+        StringBuilder stringBuilder = new StringBuilder();
+        for (int i = 0; i < md5Array.length; i++) {
+            String hexString = Integer.toHexString(0xFF & md5Array[i]);
+            if (hexString.length() == 1) {
+                hexString = "0" + hexString;
+            }
+            stringBuilder.append(hexString);
+        }
+        return stringBuilder.toString();
+    }
+
+    /**
+     * 获取appkey
+     *
+     * @return appKey
+     */
+    public static String getAppKey() {
+        // TODO 替换自己的appkey
+        return BotConstants.SIGNATURE_KEY;
+    }
+
+    /**
+     * 获取随机数的签名值
+     * 签名算法md5(rand + appKey)
+     *
+     * @param random 随机值
+     * @return 签名值
+     */
+    public static String sign(@NonNull final String random) {
+        return getMd5(random + getAppKey());
+    }
+}

+ 37 - 0
app/src/main/java/com/edufound/reader/botsdk/IBotIntentCallback.java

@@ -0,0 +1,37 @@
+package com.edufound.reader.botsdk;
+
+import com.baidu.duer.botsdk.BotIntent;
+
+import java.util.HashMap;
+
+public interface IBotIntentCallback {
+
+    /**
+     * 意图下发。开发者在<a herf="">DBP平台</a>上面开发的意图,在匹配到对应用户query之后,会封装对应意图成为Intent下发下来。
+     * APP通过{@link BotIntent#name}来确定意图名称,之后开发对应的逻辑。同时APP还可以通过{@link BotIntent#slots}解析参数
+     *
+     * @param intent     意图内容,参考{@link BotIntent} 包含意图名称和槽位参数
+     * @param customData 自定义数据,结构化数据。参考 <a herf="http://icode.baidu.com/repos/baidu/duer/open-platform-api-doc/blob/master:dueros-conversational-service/device-interface/bot-app-sdk-private.md">BotSDK协议文档</a>
+     */
+    void handleIntent(BotIntent intent, String customData);
+
+    /**
+     * ClickLink事件下发,ClickLink是一种Directive,用户新增自定义交互之后,云端会解析用户定义的交互,下发对应的指令
+     * 例如APP新增自定义交互样例{@code <"试一试",url>},用户query"试一试"
+     * 之后DuerOS会通过此接口下发 上面定义的url
+     * 如果用户引用系统内建自定义类型,用户query中可以包含参数,例如"输入北京",这个query中北京可以被解析成参数,放到后面paramMap中下发
+     * 系统内建类型参考:<a herf="https://github.com/dueros/AndroidBotSdkDemo">DCS type文档</a>
+     *
+     * @param url      自定义交互描述中的url
+     * @param paramMap 对于系统内建类型,参数列表。参数就是从query中通过分词取得的关键词。
+     */
+
+    void onClickLink(String url, HashMap<String, String> paramMap);
+
+    /**
+     * 处理屏幕导航事件
+     *
+     * @param event 屏幕导航事件值
+     */
+    void onHandleScreenNavigatorEvent(int event);
+}

+ 7 - 0
app/src/main/java/com/edufound/reader/contract/MyTabFragmentContract.java

@@ -16,6 +16,7 @@ public interface MyTabFragmentContract {
         void getMyRecords(Activity activity, Callback callback);
 
         void getMyInfo(Activity activity, Callback callback);
+
     }
 
     interface View extends BaseView {
@@ -27,6 +28,8 @@ public interface MyTabFragmentContract {
 
         void loadMoreItem();
 
+        void getIsBuySuccess(String date);
+
     }
 
     interface Presenter {
@@ -39,6 +42,10 @@ public interface MyTabFragmentContract {
 
         void getMyInfo();
 
+        void getIsBuy();
+
+        void getAuth();
+
 
     }
 }

+ 2 - 0
app/src/main/java/com/edufound/reader/contract/OthersRecordContract.java

@@ -48,5 +48,7 @@ public interface OthersRecordContract {
 
         void sendBackReceiver(String action);
 
+        void setBackRecordId(String id);
+
     }
 }

+ 10 - 0
app/src/main/java/com/edufound/reader/contract/PayContract.java

@@ -1,14 +1,24 @@
 package com.edufound.reader.contract;
 
+import android.widget.LinearLayout;
+
 import com.edufound.reader.base.BaseView;
 
+import io.reactivex.rxjava3.functions.Consumer;
+
 public interface PayContract {
     interface Model {
     }
 
     interface View extends BaseView {
+        void getProductSuccess();
+
+        void addUiClick(android.view.View view, Consumer onNext);
     }
 
     interface Presenter {
+        void getProductInfo();
+
+        void initPayItem(LinearLayout itemFrame);
     }
 }

+ 40 - 1
app/src/main/java/com/edufound/reader/fragment/CharacterFragment.java

@@ -10,18 +10,25 @@ import android.widget.HorizontalScrollView;
 import android.widget.ImageView;
 import android.widget.Space;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.activity.SafflowerActivity;
 import com.edufound.reader.base.BaseMvpFragment;
 import com.edufound.reader.contract.CharacterFragmentContract;
 import com.edufound.reader.presenter.CharacterFragmentPresenter;
 import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.GlideUtils;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.jakewharton.rxbinding4.view.RxViewGroup;
 import com.jakewharton.rxbinding4.view.ViewGroupHierarchyChangeEvent;
 import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
+import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.functions.Consumer;
 
 public class CharacterFragment extends BaseMvpFragment<CharacterFragmentPresenter> implements CharacterFragmentContract.View {
@@ -43,6 +50,7 @@ public class CharacterFragment extends BaseMvpFragment<CharacterFragmentPresente
         mScreenRect = new Rect(0, 0, Consts.getScreenSize()[0], Consts.getScreenSize()[1]);
         //初始化左侧广告UI
         ImageView mCharacterImage = view.findViewById(R.id.fragment_main_character_img);
+        GlideUtils.loadImageSizeKipMemoryCache(getContext(), "http://reader-apk.ai160.com/reader-apk/res/character_image.png", mCharacterImage);
         mScrollView = view.findViewById(R.id.fragment_main_character_scrollview);
         mGridLayout = view.findViewById(R.id.fragment_my_recyclerview);
         mBottomView = view.findViewById(R.id.fragment_main_character_bottomview);
@@ -117,8 +125,9 @@ public class CharacterFragment extends BaseMvpFragment<CharacterFragmentPresente
 
     @Override
     public void onDestroy() {
-        super.onDestroy();
+        isNeedLoad = true;
         mPresenter.onDestory(mGridLayout);
+        super.onDestroy();
     }
 
     @Override
@@ -137,6 +146,36 @@ public class CharacterFragment extends BaseMvpFragment<CharacterFragmentPresente
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public void onDestroyView() {
         super.onDestroyView();
         mPresenter.onDestory(mGridLayout);

+ 54 - 9
app/src/main/java/com/edufound/reader/fragment/MyTabFragment.java

@@ -14,6 +14,8 @@ import android.widget.Space;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.activity.CustomerServiceActivity;
 import com.edufound.reader.activity.MessageActivity;
@@ -31,8 +33,13 @@ import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
 import com.jakewharton.rxbinding4.view.RxView;
+import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
+import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.functions.Consumer;
 
 public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> implements MyTabFragmentContract.View {
@@ -81,14 +88,7 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
         mHeadUserFans = headlayout.findViewById(R.id.fragment_main_user_fans);
         mHeadUserPlayCount = headlayout.findViewById(R.id.fragment_main_user_playcount);
         mHeadUserVip = headlayout.findViewById(R.id.fragment_main_user_vip);
-        mOverDate = view.findViewById(R.id.fragment_main_user_vip_date);
-        if (true) {
-            mHeadUserVip.setBackgroundResource(R.drawable.fragment_my_vip_renew);
-            mOverDate.setVisibility(View.VISIBLE);
-        } else {
-            mHeadUserVip.setBackgroundResource(R.drawable.fragment_my_vip);
-            mOverDate.setVisibility(View.INVISIBLE);
-        }
+        mOverDate = headlayout.findViewById(R.id.fragment_main_user_vip_date);
         mHeadUserRedFlower = headlayout.findViewById(R.id.fragment_main_user_redflower);
         mHeadUserMyAttention = headlayout.findViewById(R.id.fragment_main_user_myattention);
         mHeadUserMyCollection = headlayout.findViewById(R.id.fragment_main_user_mycollection);
@@ -102,6 +102,8 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
         mPresenter.initGridLayout(mGridLayout, mNoRecordLayout);
         mPresenter.getMyInfo();
         mPresenter.getMyRecords();
+//        mPresenter.getIsBuy();
+        mPresenter.getAuth();
     }
 
 
@@ -248,10 +250,41 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public void onDestroyView() {
-        super.onDestroyView();
         isNeedLoad = true;
         mPresenter.onDestory(mGridLayout);
+        super.onDestroyView();
+
     }
 
     @Override
@@ -265,4 +298,16 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
             isNeedLoad = true;
         }
     }
+
+    @Override
+    public void getIsBuySuccess(String date) {
+        if (date == null || date.equals("")) {
+            mHeadUserVip.setBackgroundResource(R.drawable.fragment_my_vip);
+            mOverDate.setVisibility(View.GONE);
+        } else {
+            mHeadUserVip.setBackgroundResource(R.drawable.fragment_my_vip_renew);
+            mOverDate.setVisibility(View.VISIBLE);
+            mOverDate.setText("到期时间:" + date);
+        }
+    }
 }

+ 37 - 0
app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java

@@ -11,6 +11,8 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.baidu.duer.bot.directive.payload.AmountInfo;
+import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
 import com.edufound.reader.activity.CommentActivity;
 import com.edufound.reader.activity.OthersRecordActivity;
@@ -24,8 +26,12 @@ import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
 import com.orhanobut.logger.Logger;
 
+import java.util.HashMap;
+
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 import cn.jzvd.JzvdStd;
+import io.reactivex.rxjava3.annotations.Nullable;
 
 public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresenter> implements RecommendFragmentContract.View {
 
@@ -231,6 +237,7 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
             Logger.e("点击了手机号和头像,跳转他人作品界面");
             Bundle bundle = new Bundle();
             bundle.putString("other_uid", bean.getUser().getUid());
+            bundle.putString("record_id", bean.getUserRead().getId());
             bundle.putString("intoPage", "RecommendFragment");
             toNextActivity(OthersRecordActivity.class, bundle);
         });
@@ -306,6 +313,36 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
     }
 
     @Override
+    public void botHandleIntent(BotIntent intent, String customData) {
+
+    }
+
+    @Override
+    public void botOnClickLink(String url, HashMap<String, String> paramMap) {
+
+    }
+
+    @Override
+    public void botOnHandleScreenNavigatorEvent(int event) {
+
+    }
+
+    @Override
+    public void botOnLinkAccountSucceed(String s, String s1) {
+
+    }
+
+    @Override
+    public void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) {
+
+    }
+
+    @Override
+    public void botOnBuyStatusUpdated(@NonNull String purchaseResult, @NonNull String productId, @NonNull String baiduOrderId, @NonNull String sellerOrderId, @Nullable String msg, String token) {
+
+    }
+
+    @Override
     public void onDestroyView() {
         mPresenter.activityDestory();
         super.onDestroyView();

+ 1 - 0
app/src/main/java/com/edufound/reader/model/MyTabFragmentModel.java

@@ -21,4 +21,5 @@ public class MyTabFragmentModel implements MyTabFragmentContract.Model {
     public void getMyInfo(Activity activity, Callback callback) {
         OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/user/my"), callback);
     }
+
 }

+ 4 - 1
app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java

@@ -18,6 +18,7 @@ import com.edufound.reader.cusview.GridRadioGroup;
 import com.edufound.reader.listener.PopUtilClickListener;
 import com.edufound.reader.listener.PopupRecordStatusListener;
 import com.edufound.reader.presenter.PopWindowPresneter;
+import com.edufound.reader.util.GlideUtils;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.orhanobut.logger.Logger;
 
@@ -58,6 +59,7 @@ public class PopWindowUtil {
         dialog_view.setFocusable(true);
 
         ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_app_image);
+        GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/exit_app.png", image);
         FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_exit_app_ok);
         FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_exit_app_cancel);
         setClickListener(exit, o -> {
@@ -155,6 +157,7 @@ public class PopWindowUtil {
         View dialog_view = LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_login, null);
         dialog_view.setFocusable(true);
         ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_login_image);
+        GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/exit_login.png", image);
         FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_exit_login_ok);
         FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_exit_login_cancel);
         setClickListener(exit, o -> {
@@ -209,7 +212,7 @@ public class PopWindowUtil {
     }
 
 
-    public static void showRecordStatusWindow(Activity context, View parent, RecordResultBean bean, UserRecordBean.UserRead userread,PopupRecordStatusListener listener) {
+    public static void showRecordStatusWindow(Activity context, View parent, RecordResultBean bean, UserRecordBean.UserRead userread, PopupRecordStatusListener listener) {
         initPresenter();
         if (checkWindowShoing()) {
             return;

+ 1 - 1
app/src/main/java/com/edufound/reader/presenter/CharacterFragmentPresenter.java

@@ -135,7 +135,7 @@ public class CharacterFragmentPresenter extends BasePresenter<CharacterFragmentC
             bundle.putString("index", index + "");
             bundle.putString("dataJson", "getmmkv");
             //数据太多了。直接传不过去,通过MMKV写一下再读一下
-            MMKVUtil.getInstance().encode("example_video", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
+            MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
             ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
         });
 

+ 1 - 1
app/src/main/java/com/edufound/reader/presenter/MyCollectionPresenter.java

@@ -83,7 +83,7 @@ public class MyCollectionPresenter extends BasePresenter<MyCollectionContract.Vi
                 bundle.putString("index", position + "");
                 bundle.putString("dataJson", "getmmkv");
                 //数据太多了。直接传不过去,通过MMKV写一下再读一下
-                MMKVUtil.getInstance().encode("example_video", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
+                MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
 //            bundle.putString("dataJson", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
                 ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
             }

+ 61 - 4
app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java

@@ -4,6 +4,7 @@ import android.animation.Animator;
 import android.animation.LayoutTransition;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.view.LayoutInflater;
@@ -16,6 +17,8 @@ import android.widget.TextView;
 
 import com.edufound.reader.R;
 import com.edufound.reader.activity.SmallFullVideoActivity;
+import com.edufound.reader.apiserver.OrderApiServerImpl;
+import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.MyInfoBean;
@@ -28,6 +31,7 @@ import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.receiver.BackPageReceiver;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
+import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.SizeUtils;
 import com.google.gson.reflect.TypeToken;
 import com.okhttplib.HttpInfo;
@@ -40,6 +44,7 @@ import java.util.List;
 public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.View> implements MyTabFragmentContract.Presenter {
 
     MyTabFragmentModel mModel;
+    OrderApiServerImpl mOrderApi;
     Context mContext;
     List<UserRecordBean> mDataList;
     int mListStart = 0;
@@ -48,6 +53,7 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
     public MyTabFragmentPresenter(Context context) {
         mContext = context;
         mModel = new MyTabFragmentModel();
+        mOrderApi = new OrderApiServerImpl();
         BackPageReceiver.registerReceiver(context, BackPageReceiver.BACK_HOME_REF_USER_INFO);
         BackPageReceiver.registerBackPageReceiverListener(backListener);
     }
@@ -97,6 +103,7 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
     @Override
     public void onDestory(GridLayout layout) {
+        BackPageReceiver.unRegisterReceiver(mView.getActivity());
         if (mUserFragmentHandler != null) {
             mUserFragmentHandler.removeMessages(MyTabFragmentModel.LOAD_GRID);
             mUserFragmentHandler = null;
@@ -128,6 +135,10 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
     @Override
     public void getMyInfo() {
+        Logger.e("获取个人信息");
+        if (mView == null) {
+            return;
+        }
         mModel.getMyInfo(mView.getActivity(), new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
@@ -144,6 +155,45 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
         });
     }
 
+    @Override
+    public void getIsBuy() {
+        mOrderApi.isBuy(mView.getActivity(), new Callback() {
+            @Override
+            public void onSuccess(HttpInfo info) throws IOException {
+                HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
+                }.getType());
+                if (Boolean.valueOf(bean.getData())) {
+
+                } else {
+                    Logger.e("没有购买");
+                }
+//                mView.getIsBuySuccess(Boolean.valueOf(bean.getData()));
+            }
+
+            @Override
+            public void onFailure(HttpInfo info) throws IOException {
+
+            }
+        });
+    }
+
+    @Override
+    public void getAuth() {
+        mOrderApi.getAuth(mView.getActivity(), new Callback() {
+            @Override
+            public void onSuccess(HttpInfo info) throws IOException {
+                HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
+                }.getType());
+                mView.getIsBuySuccess(bean.getData());
+            }
+
+            @Override
+            public void onFailure(HttpInfo info) throws IOException {
+
+            }
+        });
+    }
+
 
     private void setGridItemView(GridLayout gridLayout, int index) {
 
@@ -162,7 +212,11 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
         TextView favoritesAmount = view.findViewById(R.id.adapter_item_record_user_start_num);
         FrameLayout checkLayout = view.findViewById(R.id.adapter_item_record_user_examine_layout);
         GlideUtils.loadRoundCircleImage(mContext, reader.getCoverImg(), imgIcon, SizeUtils.dp2px(mContext, 20));
-        name.setText(reader.getTitle());
+        if (reader.getTitle().length() > 4) {
+            name.setText(reader.getTitle().substring(0, 4) + "...");
+        } else {
+            name.setText(reader.getTitle());
+        }
         lookAmount.setText(EfunboxUtil.checkNum10000(reader.getPlayAmount()));
         likeAmount.setText(EfunboxUtil.checkNum10000(reader.getLikeAmount()));
         commentAmount.setText(EfunboxUtil.checkNum10000(reader.getCommentAmount()));
@@ -218,9 +272,12 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
         });
         mView.addUiClick(view, o -> {
-            Intent intent = new Intent(mView.getActivity(), SmallFullVideoActivity.class);
-            intent.putExtra("index", index + "");
-            mView.getActivity().startActivity(intent);
+            Bundle bundle = new Bundle();
+            bundle.putString("index", index + "");
+            bundle.putString("dataJson", "getmmkv");
+            //数据太多了。直接传不过去,通过MMKV写一下再读一下
+            MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
+            ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
         });
 
         checkLayout.setOnTouchListener(new View.OnTouchListener() {

+ 8 - 2
app/src/main/java/com/edufound/reader/presenter/OthersRecordPresenter.java

@@ -52,6 +52,7 @@ public class OthersRecordPresenter extends BasePresenter<OthersRecordContract.Vi
     int onceLoadCount = 10;
     int mListStart = 0;
     int mListEnd = onceLoadCount;
+    String backRecordId = null;
 
     public OthersRecordPresenter() {
         mModel = new OthersRecordModel();
@@ -96,7 +97,7 @@ public class OthersRecordPresenter extends BasePresenter<OthersRecordContract.Vi
             bundle.putString("index", index + "");
             bundle.putString("dataJson", "getmmkv");
             //数据太多了。直接传不过去,通过MMKV写一下再读一下
-            MMKVUtil.getInstance().encode("example_video", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
+            MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
 //            bundle.putString("dataJson", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
             ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
 
@@ -192,11 +193,16 @@ public class OthersRecordPresenter extends BasePresenter<OthersRecordContract.Vi
     @Override
     public void sendBackReceiver(String action) {
         Intent intent = new Intent(action);
-        intent.putExtra("recordId", mDataList.get(0).getUserRead().getId());
+        intent.putExtra("recordId", backRecordId);
         mView.getActivity().sendBroadcast(intent);
     }
 
     @Override
+    public void setBackRecordId(String id) {
+        backRecordId = id;
+    }
+
+    @Override
     public void onDestory(GridLayout layout) {
 
         otherRecordHandler.removeMessages(CharacterFragmentModel.LOAD_GRID);

+ 103 - 0
app/src/main/java/com/edufound/reader/presenter/PayPresenter.java

@@ -1,7 +1,110 @@
 package com.edufound.reader.presenter;
 
+import android.app.ActionBar;
+import android.os.Handler;
+import android.os.Message;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.edufound.reader.R;
+import com.edufound.reader.apiserver.OrderApiServerImpl;
+import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BasePresenter;
+import com.edufound.reader.bean.HttpResultBean;
+import com.edufound.reader.bean.HttpResultDataListBean;
+import com.edufound.reader.bean.PayResultBean;
 import com.edufound.reader.contract.PayContract;
+import com.edufound.reader.model.CharacterFragmentModel;
+import com.edufound.reader.model.PayModel;
+import com.edufound.reader.util.Consts;
+import com.google.gson.reflect.TypeToken;
+import com.okhttplib.HttpInfo;
+import com.okhttplib.callback.Callback;
+import com.orhanobut.logger.Logger;
+
+import java.io.IOException;
+import java.util.List;
+
+import androidx.annotation.NonNull;
 
 public class PayPresenter extends BasePresenter<PayContract.View> implements PayContract.Presenter {
+
+    PayModel mModel;
+    OrderApiServerImpl mOrderApi;
+    List<PayResultBean> mPayResult;
+
+    public PayPresenter() {
+        this.mModel = new PayModel();
+        mOrderApi = new OrderApiServerImpl();
+    }
+
+    @Override
+    public void getProductInfo() {
+        mOrderApi.getProductInfo(mView.getActivity(), Consts.getUmengChannel(), new Callback() {
+            @Override
+            public void onSuccess(HttpInfo info) throws IOException {
+                HttpResultBean<List<PayResultBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<List<PayResultBean>>>() {
+                }.getType());
+                mPayResult = bean.getData();
+                mView.getProductSuccess();
+            }
+
+            @Override
+            public void onFailure(HttpInfo info) throws IOException {
+
+            }
+        });
+    }
+
+    @Override
+    public void initPayItem(LinearLayout itemFrame) {
+        Logger.e("initPayItem");
+        for (int i = 0; i < mPayResult.size(); i++) {
+            View view = LayoutInflater.from(mView.getActivity()).inflate(R.layout.activity_pay_item, null);
+            view.setLayoutParams(new LinearLayout.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, 0, 1));
+            view.setTag(new PayItemHolder(view));
+            mView.addUiClick(view, o -> {
+                for (int j = 0; j < itemFrame.getChildCount(); j++) {
+                    ((PayItemHolder) itemFrame.getChildAt(j).getTag()).mIsCheck.setVisibility(View.INVISIBLE);
+                }
+                ((PayItemHolder) view.getTag()).mIsCheck.setVisibility(View.VISIBLE);
+            });
+            Message message = new Message();
+            message.obj = itemFrame;
+            message.what = 1;
+            message.arg1 = i;
+            handler.sendMessageDelayed(message, 50 * i);
+        }
+
+
+    }
+
+    Handler handler = new Handler(new Handler.Callback() {
+        @Override
+        public boolean handleMessage(@NonNull Message message) {
+            switch (message.what) {
+                case 1:
+                    break;
+            }
+            return false;
+        }
+    });
+
+    class PayItemHolder {
+        TextView mTitle;
+        TextView mContent;
+        TextView mPayMoney;
+        ImageView mIsCheck;
+
+        public PayItemHolder(View itemView) {
+            mTitle = itemView.findViewById(R.id.activity_pay_item_title);
+            mContent = itemView.findViewById(R.id.activity_pay_item_content);
+            mPayMoney = itemView.findViewById(R.id.activity_pay_item_money);
+            mIsCheck = itemView.findViewById(R.id.activity_pay_item_check);
+        }
+    }
 }

+ 1 - 0
app/src/main/java/com/edufound/reader/presenter/RecommendFragmentPresenter.java

@@ -305,6 +305,7 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
     public void activityDestory() {
         mDataList = null;
         mAdapter = null;
+        BackPageReceiver.unRegisterReceiver(mView.getActivity());
         Jzvd.releaseAllVideos();
         Jzvd.backPress();
     }

+ 6 - 2
app/src/main/java/com/edufound/reader/presenter/RecordPresenter.java

@@ -27,6 +27,8 @@ import com.edufound.reader.model.RecordModel;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.receiver.BackPageReceiver;
 import com.edufound.reader.services.RecordServices;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.DataCleanManager;
 import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.videoutil.JZMediaIjk;
 import com.google.gson.JsonObject;
@@ -159,7 +161,6 @@ public class RecordPresenter extends BasePresenter<RecordContract.View> implemen
 
     @Override
     public void onVideoInfoListener(int what, int extra) {
-        Logger.e("状态:" + mView.getJZVideoView().state + "---+what:" + what);
 
         switch (mView.getJZVideoView().state) {
             case Jzvd.STATE_PLAYING:
@@ -208,7 +209,10 @@ public class RecordPresenter extends BasePresenter<RecordContract.View> implemen
     @Override
     public void activityDestroy() {
         mView.getJZVideoView().pauseVideo();
-        mRecordServices.cancelRecord();
+        mRecordServices.stopRecord();
+        mRecordServices.desrotyRecord();
+//        Consts.getmRecordSaveFile()
+        DataCleanManager.delFileBeforeTime(Consts.getmRecordSaveFile().getAbsolutePath().substring(0, Consts.getmRecordSaveFile().getAbsolutePath().lastIndexOf("/")), 0);
         Jzvd.releaseAllVideos();
 //        Intent intent = new Intent(BackPageReceiver.BACK_HOME_REF_VIDEO_ITEM);
 ////        intent.putExtra("recordId", );

+ 15 - 7
app/src/main/java/com/edufound/reader/services/RecordServices.java

@@ -152,11 +152,13 @@ public class RecordServices extends Service {
             RetValue ret = mAiengine.start(context, innerRecorder, tokenId, param, new EvalResultListener() {
                 @Override
                 public void onError(String s, EvalResult evalResult) {
+                    Logger.e("recordServices---onError");
                     mRecordCallBack.onRecordError(tokenId.toString(), evalResult);
                 }
 
                 @Override
                 public void onEvalResult(String tokenid, EvalResult evalResult) {
+                    Logger.e("recordServices---onEvalResult");
                     mRecordCallBack.onRecordResult(tokenid, evalResult);
                     recFilePath = evalResult.recFilePath();
                     Logger.e("recFilePath:" + recFilePath);
@@ -165,22 +167,22 @@ public class RecordServices extends Service {
 
                 @Override
                 public void onBinResult(String s, EvalResult evalResult) {
-
+                    Logger.e("recordServices---onBinResult");
                 }
 
                 @Override
                 public void onVad(String s, EvalResult evalResult) {
-
+                    Logger.e("recordServices---onVad");
                 }
 
                 @Override
                 public void onSoundIntensity(String s, EvalResult evalResult) {
-
+                    Logger.e("recordServices---onSoundIntensity");
                 }
 
                 @Override
                 public void onOther(String s, EvalResult evalResult) {
-
+                    Logger.e("recordServices---onOther");
                 }
             });
             Logger.e(" ret.errId:" + ret.errId);
@@ -188,6 +190,7 @@ public class RecordServices extends Service {
                 isRecording = true;
                 mRecordCallBack.onRecordStart();
             } else {
+                mAiengine.stop();
                 return;
             }
         } catch (Exception ex) {
@@ -256,9 +259,7 @@ public class RecordServices extends Service {
 
     @Override
     public void onDestroy() {
-        if (mAiengine != null) {
-            mAiengine.destroy();
-        }
+
         super.onDestroy();
     }
 
@@ -269,6 +270,13 @@ public class RecordServices extends Service {
         AudioPlayer.sharedInstance().cancel();
     }
 
+
+    public void desrotyRecord() {
+        if (mAiengine != null) {
+            mAiengine.destroy();
+        }
+    }
+
     public class RecordServicesBind extends Binder {
         public RecordServices getService() {
             return new RecordServices();

+ 140 - 0
app/src/main/java/com/edufound/reader/util/DataCleanManager.java

@@ -0,0 +1,140 @@
+package com.edufound.reader.util;
+
+
+import java.io.File;
+
+import android.content.Context;
+import android.os.Environment;
+
+/**
+ * 本应用数据清除管理器
+ */
+public class DataCleanManager {
+    /**
+     * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache)
+     *
+     * @param context
+     */
+    public static void cleanInternalCache(Context context) {
+        deleteFilesByDirectory(context.getCacheDir());
+    }
+
+    /**
+     * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases)
+     *
+     * @param context
+     */
+    public static void cleanDatabases(Context context) {
+        deleteFilesByDirectory(new File("/data/data/"
+                + context.getPackageName() + "/databases"));
+    }
+
+    /**
+     * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs)
+     *
+     * @param context
+     */
+    public static void cleanSharedPreference(Context context) {
+        deleteFilesByDirectory(new File("/data/data/"
+                + context.getPackageName() + "/shared_prefs"));
+    }
+
+    /**
+     * 按名字清除本应用数据库
+     *
+     * @param context
+     * @param dbName
+     */
+    public static void cleanDatabaseByName(Context context, String dbName) {
+        context.deleteDatabase(dbName);
+    }
+
+    /**
+     * 清除/data/data/com.xxx.xxx/files下的内容
+     *
+     * @param context
+     */
+    public static void cleanFiles(Context context) {
+        deleteFilesByDirectory(context.getFilesDir());
+    }
+
+    /**
+     * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
+     *
+     * @param context
+     */
+    public static void cleanExternalCache(Context context) {
+        if (Environment.getExternalStorageState().equals(
+                Environment.MEDIA_MOUNTED)) {
+            deleteFilesByDirectory(context.getExternalCacheDir());
+        }
+    }
+
+    /**
+     * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除
+     *
+     * @param filePath
+     */
+    public static void cleanCustomCache(String filePath) {
+        deleteFilesByDirectory(new File(filePath));
+    }
+
+    /**
+     * 清除本应用所有的数据
+     *
+     * @param context
+     * @param filepath
+     */
+    public static void cleanApplicationData(Context context, String... filepath) {
+        cleanInternalCache(context);
+        cleanExternalCache(context);
+        cleanDatabases(context);
+        cleanSharedPreference(context);
+        cleanFiles(context);
+        for (String filePath : filepath) {
+            cleanCustomCache(filePath);
+        }
+    }
+
+    /**
+     * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理
+     *
+     * @param directory
+     */
+    private static void deleteFilesByDirectory(File directory) {
+        if (directory != null && directory.exists() && directory.isDirectory()) {
+            for (File item : directory.listFiles()) {
+                item.delete();
+            }
+        }
+    }
+
+    /**
+     * 删除文件夹下指定时间以前的所有文件
+     *
+     * @param folderPath 文件夹路径
+     * @param msec       指定时间(毫秒),传 <=0 表示删除所有的文件
+     */
+    public static void delFileBeforeTime(String folderPath, long msec) {
+        File folder = new File(folderPath);
+        if (folder.exists() && folder.isDirectory()) {
+            File[] files = folder.listFiles();
+            if (files != null && files.length > 0) {
+                for (File file : files) {
+                    if (file.isFile() && (msec <= 0 || file.lastModified() < msec)) {
+                        file.delete();
+//                        Logger.e("delete file :" + file.getAbsolutePath());
+                    } else if (file.isDirectory()) {
+                        delFileBeforeTime(file.getAbsolutePath(), msec);
+                        //这里如果文件夹已经为空,直接删除文件夹
+                        File[] folderFiles = file.listFiles();
+                        if (folderFiles == null || folderFiles.length == 0) {
+                            file.delete();
+//                            Logger.e("delete folder :" + file.getAbsolutePath());
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 9 - 2
app/src/main/java/com/edufound/reader/util/EfunboxUtil.java

@@ -8,6 +8,8 @@ import android.text.TextUtils;
 import android.util.DisplayMetrics;
 
 import com.edufound.reader.activity.LoginAlertActivity;
+import com.edufound.reader.application.EApplication;
+import com.edufound.reader.bean.ChannelCode;
 import com.orhanobut.logger.Logger;
 
 import java.math.BigDecimal;
@@ -132,8 +134,13 @@ public class EfunboxUtil {
             return true;
         }
         //未登录,去登录
-        Intent tologin = new Intent(context, LoginAlertActivity.class);
-        context.startActivity(tologin);
+        if (Consts.getUmengChannel().equals(ChannelCode.BAIDU.getChannelCode())) {
+            //百度渠道调用百度的授权
+        } else if (Consts.getUmengChannel().equals(ChannelCode.YIFANG.getChannelCode())) {
+            //义方调用普通版登录
+            Intent tologin = new Intent(context, LoginAlertActivity.class);
+            context.startActivity(tologin);
+        }
         return false;
     }
 

+ 5 - 1
app/src/main/java/com/edufound/reader/util/HttpInterceptor.java

@@ -1,5 +1,7 @@
 package com.edufound.reader.util;
 
+import android.widget.Toast;
+
 import com.okhttplib.HttpInfo;
 import com.okhttplib.interceptor.ExceptionInterceptor;
 import com.okhttplib.interceptor.ResultInterceptor;
@@ -8,7 +10,6 @@ import com.okhttplib.interceptor.ResultInterceptor;
  * Http拦截器
  * 1、请求结果统一预处理拦截器
  * 2、请求链路异常信息拦截器
- *
  */
 public class HttpInterceptor {
 
@@ -33,6 +34,7 @@ public class HttpInterceptor {
         public HttpInfo intercept(HttpInfo info) throws Exception {
             switch (info.getRetCode()) {
                 case HttpInfo.NonNetwork:
+//                    Toast.makeText(Consts.getmApplicAtion(), "网络中断", Toast.LENGTH_SHORT).show();
                     info.setRetDetail("网络中断");
                     break;
                 case HttpInfo.CheckURL:
@@ -42,9 +44,11 @@ public class HttpInterceptor {
                     info.setRetDetail("协议类型错误[" + info.getNetCode() + "]");
                     break;
                 case HttpInfo.CheckNet:
+//                    Toast.makeText(Consts.getmApplicAtion(), "请检查网络连接是否正常", Toast.LENGTH_SHORT).show();
                     info.setRetDetail("请检查网络连接是否正常[" + info.getNetCode() + "]");
                     break;
                 case HttpInfo.ConnectionTimeOut:
+                    Toast.makeText(Consts.getmApplicAtion(), "连接超时", Toast.LENGTH_SHORT).show();
                     info.setRetDetail("连接超时");
                     break;
                 case HttpInfo.WriteAndReadTimeOut:

+ 1 - 1
app/src/main/java/com/edufound/reader/util/OkHttpClient.java

@@ -24,7 +24,7 @@ public class OkHttpClient {
 
     public static void initOkHttpUtil(Context context) {
         OkHttpUtil.init(context)
-                .setConnectTimeout(15)//连接超时时间
+                .setConnectTimeout(10)//连接超时时间
                 .setWriteTimeout(15)//写超时时间
                 .setReadTimeout(15)//读超时时间
                 .setMaxCacheSize(10 * 1024 * 1024)//缓存空间大小

BIN=BIN
app/src/main/res/drawable/close_icon.png


BIN=BIN
app/src/main/res/drawable/seekbar_thumb.png


+ 2 - 2
app/src/main/res/layout/activity_comment.xml

@@ -128,7 +128,7 @@
                                         android:layout_gravity="right|top"
                                         android:layout_marginTop="20dp"
                                         android:layout_marginRight="32dp"
-                                        android:src="@color/red"></ImageView>
+                                        android:src="@drawable/close_icon"></ImageView>
                             </FrameLayout>
 
                             <LinearLayout
@@ -267,7 +267,7 @@
                         android:layout_gravity="right|top"
                         android:layout_marginTop="20dp"
                         android:layout_marginRight="32dp"
-                        android:src="@color/green"></ImageView>
+                        android:src="@drawable/close_icon"></ImageView>
             </FrameLayout>
         </LinearLayout>
     </FrameLayout>

+ 1 - 214
app/src/main/res/layout/activity_pay.xml

@@ -62,6 +62,7 @@
                     android:orientation="horizontal">
 
                 <LinearLayout
+                        android:id="@+id/activity_pay_item_layouts"
                         android:layout_width="0dp"
                         android:layout_height="match_parent"
                         android:layout_gravity="center"
@@ -72,220 +73,6 @@
                         android:orientation="vertical">
 
 
-                    <FrameLayout
-                            android:layout_width="match_parent"
-                            android:layout_height="0dp"
-                            android:layout_weight="1">
-
-                        <androidx.constraintlayout.widget.ConstraintLayout
-                                android:id="@+id/activity_pay_year_item"
-                                android:layout_width="522dp"
-                                android:layout_height="190dp"
-                                android:layout_gravity="center"
-                                android:background="@drawable/activity_pay_year_bg">
-
-                            <TextView
-                                    android:layout_width="wrap_content"
-                                    android:layout_height="50dp"
-                                    android:layout_marginLeft="25dp"
-                                    android:layout_marginTop="32dp"
-                                    android:text="12个月"
-                                    android:textColor="@color/white"
-                                    android:textSize="36dp"
-                                    android:textStyle="bold"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="0.0"
-                                    app:layout_constraintStart_toStartOf="parent"
-                                    app:layout_constraintTop_toTopOf="parent"
-                                    app:layout_constraintVertical_bias="0.0"></TextView>
-
-
-                            <LinearLayout
-                                    android:id="@+id/linearLayout"
-                                    android:layout_width="wrap_content"
-                                    android:layout_height="50dp"
-                                    android:layout_marginEnd="43dp"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="1.0"
-                                    app:layout_constraintStart_toStartOf="parent"
-                                    app:layout_constraintTop_toTopOf="parent"
-                                    app:layout_constraintVertical_bias="0.23000002">
-
-                                <TextView
-                                        android:layout_width="wrap_content"
-                                        android:layout_height="30dp"
-                                        android:layout_gravity="bottom"
-                                        android:gravity="bottom"
-                                        android:text="实际支付¥"
-                                        android:textColor="@color/white"
-                                        android:textSize="24dp"
-                                        android:textStyle="bold"></TextView>
-
-                                <TextView
-                                        android:layout_width="wrap_content"
-                                        android:layout_height="50dp"
-                                        android:layout_gravity="bottom"
-                                        android:gravity="bottom"
-                                        android:text="60"
-                                        android:textColor="@color/white"
-                                        android:textSize="36dp"
-                                        android:textStyle="bold"></TextView>
-
-                                <TextView
-                                        android:layout_width="wrap_content"
-                                        android:layout_height="30dp"
-                                        android:layout_gravity="bottom"
-                                        android:gravity="bottom"
-                                        android:text="元"
-                                        android:textColor="@color/white"
-                                        android:textSize="24dp"
-                                        android:textStyle="bold"></TextView>
-                            </LinearLayout>
-
-                            <TextView
-                                    android:id="@+id/textView2"
-                                    android:layout_width="wrap_content"
-                                    android:layout_height="25dp"
-                                    android:layout_marginLeft="25dp"
-                                    android:layout_marginBottom="32dp"
-                                    android:text="1222222222月"
-                                    android:textColor="@color/white"
-                                    android:textSize="18dp"
-                                    android:textStyle="bold"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="0.0"
-                                    app:layout_constraintStart_toStartOf="parent"
-                                    app:layout_constraintTop_toTopOf="parent"
-                                    app:layout_constraintVertical_bias="0.85"></TextView>
-
-
-                            <ImageView
-                                    android:id="@+id/activity_pay_year_item_check"
-                                    android:layout_width="73dp"
-                                    android:layout_height="58dp"
-                                    android:layout_marginEnd="12dp"
-                                    android:layout_marginBottom="5dp"
-                                    android:src="@drawable/activity_pay_itemcheck"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="1.0"
-                                    app:layout_constraintStart_toEndOf="@+id/textView2"
-                                    app:layout_constraintTop_toBottomOf="@+id/linearLayout"
-                                    app:layout_constraintVertical_bias="0.81"></ImageView>
-                        </androidx.constraintlayout.widget.ConstraintLayout>
-
-                    </FrameLayout>
-
-                    <FrameLayout
-                            android:layout_width="match_parent"
-                            android:layout_height="0dp"
-                            android:layout_gravity="center"
-                            android:layout_weight="1">
-
-                        <androidx.constraintlayout.widget.ConstraintLayout
-                                android:id="@+id/activity_pay_month_item"
-                                android:layout_width="522dp"
-                                android:layout_height="190dp"
-                                android:layout_gravity="center"
-                                android:background="@drawable/activity_pay_month_bg">
-
-                            <TextView
-                                    android:layout_width="wrap_content"
-                                    android:layout_height="50dp"
-                                    android:layout_marginLeft="25dp"
-                                    android:layout_marginTop="32dp"
-                                    android:text="12个月"
-                                    android:textColor="@color/white"
-                                    android:textSize="36dp"
-                                    android:textStyle="bold"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="0.0"
-                                    app:layout_constraintStart_toStartOf="parent"
-                                    app:layout_constraintTop_toTopOf="parent"
-                                    app:layout_constraintVertical_bias="0.0"></TextView>
-
-
-                            <LinearLayout
-                                    android:id="@+id/linearLayout2"
-                                    android:layout_width="wrap_content"
-                                    android:layout_height="50dp"
-                                    android:layout_marginEnd="43dp"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="1.0"
-                                    app:layout_constraintStart_toStartOf="parent"
-                                    app:layout_constraintTop_toTopOf="parent"
-                                    app:layout_constraintVertical_bias="0.23000002">
-
-                                <TextView
-                                        android:layout_width="wrap_content"
-                                        android:layout_height="30dp"
-                                        android:layout_gravity="bottom"
-                                        android:gravity="bottom"
-                                        android:text="实际支付¥"
-                                        android:textColor="@color/white"
-                                        android:textSize="24dp"
-                                        android:textStyle="bold"></TextView>
-
-                                <TextView
-                                        android:layout_width="wrap_content"
-                                        android:layout_height="50dp"
-                                        android:layout_gravity="bottom"
-                                        android:gravity="bottom"
-                                        android:text="60"
-                                        android:textColor="@color/white"
-                                        android:textSize="36dp"
-                                        android:textStyle="bold"></TextView>
-
-                                <TextView
-                                        android:layout_width="wrap_content"
-                                        android:layout_height="30dp"
-                                        android:layout_gravity="bottom"
-                                        android:gravity="bottom"
-                                        android:text="元"
-                                        android:textColor="@color/white"
-                                        android:textSize="24dp"
-                                        android:textStyle="bold"></TextView>
-                            </LinearLayout>
-
-                            <TextView
-                                    android:id="@+id/textView3"
-                                    android:layout_width="wrap_content"
-                                    android:layout_height="25dp"
-                                    android:layout_marginLeft="25dp"
-                                    android:layout_marginBottom="32dp"
-                                    android:text="1222222222月"
-                                    android:textColor="@color/white"
-                                    android:textSize="18dp"
-                                    android:textStyle="bold"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="0.0"
-                                    app:layout_constraintStart_toStartOf="parent"
-                                    app:layout_constraintTop_toTopOf="parent"
-                                    app:layout_constraintVertical_bias="0.85"></TextView>
-
-
-                            <ImageView
-                                    android:id="@+id/activity_pay_month_item_check"
-                                    android:layout_width="73dp"
-                                    android:layout_height="58dp"
-                                    android:layout_marginEnd="12dp"
-                                    android:layout_marginBottom="5dp"
-                                    android:src="@drawable/activity_pay_itemcheck"
-                                    app:layout_constraintBottom_toBottomOf="parent"
-                                    app:layout_constraintEnd_toEndOf="parent"
-                                    app:layout_constraintHorizontal_bias="1.0"
-                                    app:layout_constraintStart_toEndOf="@+id/textView3"
-                                    app:layout_constraintTop_toBottomOf="@+id/linearLayout2"
-                                    app:layout_constraintVertical_bias="0.76"></ImageView>
-                        </androidx.constraintlayout.widget.ConstraintLayout>
-
-                    </FrameLayout>
                 </LinearLayout>
 
                 <FrameLayout

+ 115 - 0
app/src/main/res/layout/activity_pay_item.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="center">
+
+
+    <com.edufound.reader.cusview.RoundFrameLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:elevation="15dp">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/activity_pay_year_item"
+                android:layout_width="522dp"
+                android:layout_height="190dp"
+                android:layout_gravity="center"
+                android:background="@color/red">
+
+            <TextView
+                    android:id="@+id/activity_pay_item_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="50dp"
+                    android:layout_marginLeft="25dp"
+                    android:layout_marginTop="32dp"
+                    android:text="12个月"
+                    android:textColor="@color/white"
+                    android:textSize="36dp"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="0.0"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:layout_constraintVertical_bias="0.0"></TextView>
+
+
+            <LinearLayout
+                    android:id="@+id/linearLayout"
+                    android:layout_width="wrap_content"
+                    android:layout_height="50dp"
+                    android:layout_marginEnd="20dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="1.0"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:layout_constraintVertical_bias="0.23000002">
+
+                <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="30dp"
+                        android:layout_gravity="bottom"
+                        android:gravity="bottom"
+                        android:text="实际支付¥"
+                        android:textColor="@color/white"
+                        android:textSize="24dp"
+                        android:textStyle="bold"></TextView>
+
+                <TextView
+                        android:id="@+id/activity_pay_item_money"
+                        android:layout_width="wrap_content"
+                        android:layout_height="50dp"
+                        android:layout_gravity="bottom"
+                        android:gravity="bottom"
+                        android:text="60"
+                        android:textColor="@color/white"
+                        android:textSize="36dp"
+                        android:textStyle="bold"></TextView>
+
+                <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="30dp"
+                        android:layout_gravity="bottom"
+                        android:gravity="bottom"
+                        android:text="元"
+                        android:textColor="@color/white"
+                        android:textSize="24dp"
+                        android:textStyle="bold"></TextView>
+            </LinearLayout>
+
+            <TextView
+                    android:id="@+id/activity_pay_item_content"
+                    android:layout_width="wrap_content"
+                    android:layout_height="25dp"
+                    android:layout_marginStart="25dp"
+                    android:layout_marginBottom="15dp"
+                    android:text="1222222222月"
+                    android:textColor="@color/white"
+                    android:textSize="18dp"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="0.0"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:layout_constraintVertical_bias="1.0"></TextView>
+
+
+            <ImageView
+                    android:id="@+id/activity_pay_item_check"
+                    android:layout_width="73dp"
+                    android:layout_height="58dp"
+                    android:src="@drawable/activity_pay_itemcheck"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="1.0"
+                    app:layout_constraintStart_toEndOf="@+id/activity_pay_item_content"
+                    app:layout_constraintTop_toBottomOf="@+id/linearLayout"
+                    app:layout_constraintVertical_bias="1.0"></ImageView>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </com.edufound.reader.cusview.RoundFrameLayout>
+</FrameLayout>

+ 1 - 1
app/src/main/res/layout/adapter_item_message.xml

@@ -40,7 +40,7 @@
                     android:layout_width="898dp"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center"
-                    android:text="通知:你发布了12个作品,共有2983次观看、有234人为你点赞非常棒,继续加油呀。兑换礼继续加油油呀。是可以…"
+                    android:text=""
                     android:textColor="#333333"
                     android:textSize="34dp"></TextView>
 

+ 1 - 1
app/src/main/res/layout/adapter_item_slidevideo.xml

@@ -39,7 +39,7 @@
                 android:text="弹幕"
                 android:textColor="@color/black"
                 android:textSize="25dp"
-                android:thumb="@drawable/seekbar_thumb"
+                android:thumb="@drawable/switch_thumb"
                 android:track="@drawable/slidevideo_switch_track_selector" />
     </LinearLayout>
 </FrameLayout>

+ 1 - 2
app/src/main/res/layout/fragment_main_character.xml

@@ -47,8 +47,7 @@
                             android:id="@+id/fragment_main_character_img"
                             android:layout_width="match_parent"
                             android:layout_height="match_parent"
-                            android:layout_marginBottom="35dp"
-                            android:background="@color/yellow"></ImageView>
+                            android:layout_marginBottom="35dp"></ImageView>
 
                 </LinearLayout>
             </FrameLayout>

+ 1 - 1
app/src/main/res/layout/fragment_main_user.xml

@@ -221,7 +221,7 @@
                                     android:text="到期:2020-01-06"
                                     android:textColor="@color/white"
                                     android:textSize="26dp"
-                                    android:visibility="invisible"></TextView>
+                                    android:visibility="gone"></TextView>
                         </FrameLayout>
 
 

+ 1 - 2
app/src/main/res/layout/popupwindow_exit_app.xml

@@ -16,8 +16,7 @@
         <ImageView
                 android:id="@+id/popupwindow_exit_app_image"
                 android:layout_width="match_parent"
-                android:layout_height="341dp"
-                android:background="@color/red"></ImageView>
+                android:layout_height="341dp"></ImageView>
 
         <LinearLayout
                 android:layout_width="match_parent"

+ 2 - 0
build.gradle

@@ -20,6 +20,8 @@ allprojects {
         mavenCentral()
         maven { url "https://oss.jfrog.org/libs-snapshot" }
         maven { url 'https://jitpack.io' }
+        maven{ url 'https://dueros.baidu.com/maven/repository/maven-releases/'}
+        maven{ url 'https://dueros.baidu.com/maven/repository/maven-snapshots/'}
     }
 }
 

+ 1 - 0
gradle.properties

@@ -13,3 +13,4 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 # org.gradle.parallel=true
+FASTJSON_VERSION=1.1.71.android