Przeglądaj źródła

1.增加天猫支付
2.增加天猫支付逻辑等
3.增加义方逻辑等

FailedToRead 3 lat temu
rodzic
commit
6849ae96e8
43 zmienionych plików z 1421 dodań i 301 usunięć
  1. 10 0
      .idea/jarRepositories.xml
  2. 13 0
      .idea/misc.xml
  3. 9 4
      app/build.gradle
  4. BIN
      app/libs/MemberSdk_202112301125_1.0.0.0_release.aar
  5. BIN
      app/libs/ailabsSDK-3.0.0.151.aar
  6. BIN
      app/libs/aranger.jar
  7. BIN
      app/libs/gcs-authservice-1.0.0.21.jar
  8. BIN
      app/libs/multirouter-1.0.1.24.aar
  9. BIN
      app/libs/registry-api-1.1.16-20201203.085134-3.jar
  10. BIN
      app/libs/rpc-0.0.1.20.aar
  11. 7 7
      app/src/fragmentRecommend/layout/fragment_main_recommend.xml
  12. 176 165
      app/src/main/AndroidManifest.xml
  13. 38 15
      app/src/main/java/com/edufound/reader/activity/MainActivity.java
  14. 113 0
      app/src/main/java/com/edufound/reader/activity/TmailPayActivity.java
  15. 14 2
      app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java
  16. 8 0
      app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java
  17. 173 53
      app/src/main/java/com/edufound/reader/base/BaseActivity.java
  18. 17 0
      app/src/main/java/com/edufound/reader/botsdk/BotMessageListener.java
  19. 38 0
      app/src/main/java/com/edufound/reader/contract/TmailPayContract.java
  20. 2 1
      app/src/main/java/com/edufound/reader/fragment/CharacterFragment.java
  21. 3 4
      app/src/main/java/com/edufound/reader/fragment/MyTabFragment.java
  22. 13 1
      app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java
  23. 3 0
      app/src/main/java/com/edufound/reader/model/MainModel.java
  24. 23 0
      app/src/main/java/com/edufound/reader/model/TmailPayModel.java
  25. 63 34
      app/src/main/java/com/edufound/reader/presenter/LoginAlertPresenter.java
  26. 42 6
      app/src/main/java/com/edufound/reader/presenter/MainPresenter.java
  27. 5 2
      app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java
  28. 231 0
      app/src/main/java/com/edufound/reader/presenter/TmailPayPresenter.java
  29. 4 0
      app/src/main/java/com/edufound/reader/presenter/UserInfoSettingPresenter.java
  30. 5 0
      app/src/main/java/com/edufound/reader/tmailsdk/TMailConstants.java
  31. 163 0
      app/src/main/java/com/edufound/reader/tmailsdk/TMailSDKUtil.java
  32. 31 0
      app/src/main/java/com/edufound/reader/util/Consts.java
  33. 1 0
      app/src/main/java/com/edufound/reader/util/EfunboxCallBack.java
  34. 14 4
      app/src/main/java/com/edufound/reader/util/EfunboxUtil.java
  35. 13 1
      app/src/main/java/com/edufound/reader/util/OkHttpClient.java
  36. BIN
      app/src/main/res/drawable/activity_pay_tmail_item_btn.png
  37. BIN
      app/src/main/res/drawable/activity_pay_tmail_item_recommend.png
  38. BIN
      app/src/main/res/drawable/activity_pay_tmail_item_year.png
  39. BIN
      app/src/main/res/drawable/activity_pay_tmal_item_month.png
  40. BIN
      app/src/main/res/drawable/icon.png
  41. 83 0
      app/src/main/res/layout/activity_pay_tmail.xml
  42. 104 0
      app/src/main/res/layout/activity_pay_tmail_item.xml
  43. 2 2
      build.gradle

+ 10 - 0
.idea/jarRepositories.xml

@@ -51,5 +51,15 @@
       <option name="name" value="maven4" />
       <option name="url" value="https://dueros.baidu.com/maven/repository/maven-snapshots/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven6" />
+      <option name="name" value="maven6" />
+      <option name="url" value="https://maven.aliyun.com/nexus/content/repositories/releases/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven5" />
+      <option name="name" value="maven5" />
+      <option name="url" value="https://mvnrepo.alibaba-inc.com/mvn/repository" />
+    </remote-repository>
   </component>
 </project>

+ 13 - 0
.idea/misc.xml

@@ -112,6 +112,19 @@
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/layout/window_deviceinfo.xml" value="0.33" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.4931640625" />
         <entry key="..\:/WorkSpace/Git_WorkSpace/efunboxReader-android/efunboxReader-android-master/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml" value="0.4699248120300752" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/drawable/slidevideo_switch_track_selector.xml" value="0.2005" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentRecommend/layout/fragment_main_recommend.xml" value="0.33" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentUser/layout/activity_smallfull_video.xml" value="0.21897810218978103" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentUser/layout/popupwindow_exit_login.xml" value="0.2384428223844282" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/fragmentUser/layout/popupwindow_select_grade.xml" value="0.1922141119221411" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/drawable/activity_comment_item_divier.xml" value="0.2005" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_pay.xml" value="0.33" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_pay_item.xml" value="0.21897810218978103" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_pay_tmail.xml" value="0.33" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_pay_tmail_item.xml" value="0.67" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/activity_userinfo_setting.xml" value="0.5" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/fragment_main_character.xml" value="0.2615571776155718" />
+        <entry key="..\:/Work_Space/Android_Space/efunboxReader/efunboxReader-android-master/app/src/main/res/layout/fragment_main_user.xml" value="0.67" />
       </map>
     </option>
   </component>

+ 9 - 4
app/build.gradle

@@ -27,7 +27,7 @@ android {
         efunbox {
             keyAlias "edufound_key"
             keyPassword "edufound321"
-            storeFile file("C:/Users/Candy/Desktop/edufound.keystore")
+            storeFile file("C:/Users/candy/Desktop/efunbox/edufound.keystore")
             storePassword "edufound123"
         }
     }
@@ -92,7 +92,7 @@ android {
                     appIcon: "@drawable/icon",
             ]
         }
-        //百度(小度音响)
+        //天猫精灵
         channel_tmail {
             signingConfig signingConfigs.efunbox
             manifestPlaceholders = [
@@ -112,7 +112,7 @@ android {
 }
 
 dependencies {
-
+    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
     implementation 'androidx.appcompat:appcompat:1.0.0'
     implementation 'com.github.bumptech.glide:glide:4.12.0'
     annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
@@ -172,4 +172,9 @@ dependencies {
     //zxing
     implementation 'com.google.zxing:android-core:3.3.0'
     implementation 'com.google.zxing:core:3.3.2'
-}
+
+    implementation files('libs/gcs-authservice-1.0.0.21.jar')
+    implementation files('libs/registry-api-1.1.16-20201203.085134-3.jar')
+    implementation files('libs/aranger.jar')
+
+}

BIN
app/libs/MemberSdk_202112301125_1.0.0.0_release.aar


BIN
app/libs/ailabsSDK-3.0.0.151.aar


BIN
app/libs/aranger.jar


BIN
app/libs/gcs-authservice-1.0.0.21.jar


BIN
app/libs/multirouter-1.0.1.24.aar


BIN
app/libs/registry-api-1.1.16-20201203.085134-3.jar


BIN
app/libs/rpc-0.0.1.20.aar


+ 7 - 7
app/src/fragmentRecommend/layout/fragment_main_recommend.xml

@@ -340,13 +340,13 @@
             </LinearLayout>
 
             <ImageView
-                    android:id="@+id/fragment_recommend_app_user_isvip"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center|right"
-                    android:layout_marginTop="30dp"
-                    android:layout_marginRight="10dp"
-                    android:src="@drawable/app_isvip_icon"></ImageView>
+                android:id="@+id/fragment_recommend_app_user_isvip"
+                android:layout_width="42dp"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center|right"
+                android:layout_marginTop="30dp"
+                android:layout_marginRight="10dp"
+                android:src="@drawable/app_isvip_icon"></ImageView>
         </FrameLayout>
     </FrameLayout>
 

+ 176 - 165
app/src/main/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.edufound.reader">
+    package="com.edufound.reader">
 
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -16,32 +16,33 @@
     <uses-permission android:name="com.baidu.baiduaccount.permission.READ_USERINFO" />
 
     <application
-            android:name=".application.EApplication"
-            android:allowBackup="true"
-            android:hardwareAccelerated="true"
-            android:icon="${icon}"
-            android:label="@string/app_name"
-            android:roundIcon="${icon}"
-            android:supportsRtl="true"
-            android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
+        android:name=".application.EApplication"
+        android:allowBackup="true"
+        android:hardwareAccelerated="true"
+        android:icon="${icon}"
+        android:label="@string/app_name"
+        android:roundIcon="${icon}"
+        android:supportsRtl="true"
+        android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
+        android:usesCleartextTraffic="true">
         <meta-data
-                android:name="android.notch_support"
-                android:value="true" />
+            android:name="android.notch_support"
+            android:value="true" />
         <meta-data
-                android:name="android.max_aspect"
-                android:value="2.1" />
+            android:name="android.max_aspect"
+            android:value="2.1" />
         <meta-data
-                android:name="notch.config"
-                android:value="portrait|landscape" /> <!-- 主页 -->
-        <activity
-                android:name=".activity.MainActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTop"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/AppStartTheme"
-                android:windowSoftInputMode="adjustNothing|stateHidden">
+            android:name="notch.config"
+            android:value="portrait|landscape" /> <!-- 主页 -->
+        <activity
+            android:name=".activity.MainActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTop"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/AppStartTheme"
+            android:windowSoftInputMode="adjustNothing|stateHidden">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="com.edufound.reader.MAIN"></action>
@@ -56,176 +57,186 @@
 
                 <category android:name="android.intent.category.BROWSABLE" />
                 <data
-                        android:host="com.edufound.reader"
-                        android:path="/main"
-                        android:scheme="efunbox" />
+                    android:host="com.edufound.reader"
+                    android:path="/main"
+                    android:scheme="efunbox" />
             </intent-filter>
 
         </activity>
         <!-- 录音界面 -->
         <activity
-                android:name=".activity.RecordActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
-                android:windowSoftInputMode="adjustNothing|stateHidden" /> <!-- 登录界面 -->
-        <activity
-                android:name=".activity.CrashDialogActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/AppStartTheme"
-                android:windowSoftInputMode="adjustNothing|stateHidden">
+            android:name=".activity.RecordActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"
+            android:windowSoftInputMode="adjustNothing|stateHidden" /> <!-- 登录界面 -->
+        <activity
+            android:name=".activity.CrashDialogActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/AppStartTheme"
+            android:windowSoftInputMode="adjustNothing|stateHidden">
 
         </activity>
         <!-- 登录界面 -->
         <activity
-                android:name=".activity.LoginAlertActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.LoginAlertActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
         <!-- 我的收藏界面 -->
         <activity
-                android:name=".activity.MyCollectionActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.MyCollectionActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
         <!-- 我的关注界面 -->
         <activity
-                android:name=".activity.MyFollowActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.MyFollowActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
         <!-- 消息通知界面 -->
         <activity
-                android:name=".activity.MessageActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.MessageActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
         <!-- 联系我们界面 -->
         <activity
-                android:name=".activity.CustomerServiceActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.CustomerServiceActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
         <!-- 支付界面 -->
         <activity
-                android:name=".activity.PayActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.PayActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+        <activity
+            android:name=".activity.TmailPayActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+
         <!-- 评论界面 -->
         <activity
-                android:name=".activity.CommentActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustPan|stateHidden" /> <!-- web界面 -->
-        <activity
-                android:name=".activity.WebActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:process=":web"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
-        <activity
-                android:name=".activity.SmallFullVideoActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
-        <activity
-                android:name=".activity.OthersRecordActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
-        <activity
-                android:name=".activity.UserInfoSettingActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
-        <activity
-                android:name=".activity.SafflowerActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden" />
+            android:name=".activity.CommentActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustPan|stateHidden" /> <!-- web界面 -->
+        <activity
+            android:name=".activity.WebActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:process=":web"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+        <activity
+            android:name=".activity.SmallFullVideoActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+        <activity
+            android:name=".activity.OthersRecordActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+        <activity
+            android:name=".activity.UserInfoSettingActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+        <activity
+            android:name=".activity.SafflowerActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
 
 
         <activity
-                android:name=".support.DebugSafeModeTipActivity"
-                android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
-                android:label=""
-                android:launchMode="singleTask"
-                android:maxAspectRatio="2.1"
-                android:resizeableActivity="true"
-                android:screenOrientation="landscape"
-                android:theme="@style/efunboxTransparentLoginAlert"
-                android:windowSoftInputMode="adjustNothing|stateHidden"></activity>
+            android:name=".support.DebugSafeModeTipActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:label=""
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="true"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden"></activity>
 
 
         <!-- 友盟start -->
         <meta-data
-                android:name="UMENG_APPKEY"
-                android:value="61e7da42e0f9bb492bd8e12e" />
+            android:name="UMENG_APPKEY"
+            android:value="61e7da42e0f9bb492bd8e12e" />
         <meta-data
-                android:name="UMENG_CHANNEL"
-                android:value="${UMENG_CHANNEL_VALUE}" /> <!-- 友盟end -->
+            android:name="UMENG_CHANNEL"
+            android:value="${UMENG_CHANNEL_VALUE}" /> <!-- 友盟end -->
         <!-- 录音services -->
         <service android:name=".services.RecordServices" />
     </application>

+ 38 - 15
app/src/main/java/com/edufound/reader/activity/MainActivity.java

@@ -17,20 +17,25 @@ import android.widget.TextView;
 
 import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.botsdk.BotIntent;
+import com.baidu.duer.membersdk.MemberSdkManager;
+import com.baidu.duer.membersdk.constant.MemberSdkConstants;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BaseMvpActivity;
+import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.UserEventEnum;
 import com.edufound.reader.contract.MainContract;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.presenter.MainPresenter;
 import com.edufound.reader.receiver.BackPageReceiver;
+import com.edufound.reader.util.Consts;
 import com.orhanobut.logger.Logger;
 
 import java.util.HashMap;
 
 import androidx.annotation.NonNull;
+
 import io.reactivex.rxjava3.annotations.Nullable;
 
 public class MainActivity extends BaseMvpActivity<MainPresenter> implements MainContract.View {
@@ -65,30 +70,48 @@ public class MainActivity extends BaseMvpActivity<MainPresenter> implements Main
 
         addUiClickListener(mExitApp, o -> {
             PopWindowUtil.showExitAppWindow(getActivity(), getRootView());
+//            mExitApp.post(new Runnable() {
+//                @Override
+//                public void run() {
+//                    toNextActivity(TmailPayActivity.class);
+//                }
+//            });
         });
         mPresenter.userIsLogin();
         mPresenter.checkModelIsDebug();
 
-     
-        if (getIntent() != null && getIntent().getStringExtra("url") != null && !getIntent().getStringExtra("url").equals("")) {
-            //efunbox://com.edufound.reader/main?resid=11132
-            Uri uri = Uri.parse(getIntent().getStringExtra("url"));
-            String exampleId = uri.getQueryParameter("exampleId");
-            String backModel = uri.getQueryParameter("backModel");
-            Logger.e("从百度获取的url:" + uri);
-            if (exampleId == null || exampleId.equals("")) {
-
-            } else {
-                Bundle bundle = new Bundle();
-                bundle.putString("exampleId", exampleId);
-                bundle.putString("backModel", backModel);
-                toNextActivity(RecordActivity.class, bundle);
 
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            if (getIntent() != null && getIntent().hasExtra(MemberSdkConstants.BOTAPP_OPEN_PARAMS_ACTIVE_INFO)) {
+                String infoData = getIntent().getStringExtra(MemberSdkConstants.BOTAPP_OPEN_PARAMS_ACTIVE_INFO);
+                MemberSdkManager.getInstance().setShowParameter(infoData);
+            }
+
+            //走百度的逻辑
+            if (getIntent() != null && getIntent().getStringExtra("url") != null && !getIntent().getStringExtra("url").equals("")) {
+                //efunbox://com.edufound.reader/main?resid=11132
+                Uri uri = Uri.parse(getIntent().getStringExtra("url"));
+                String exampleId = uri.getQueryParameter("exampleId");
+                String backModel = uri.getQueryParameter("backModel");
+                Logger.e("从百度获取的url:" + uri);
+                if (exampleId == null || exampleId.equals("")) {
+
+                } else {
+                    Bundle bundle = new Bundle();
+                    bundle.putString("exampleId", exampleId);
+                    bundle.putString("backModel", backModel);
+                    toNextActivity(RecordActivity.class, bundle);
+
+                }
             }
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            //走天猫的逻辑
+            //efunbox://com.edufound.reader/main?
+
+
         }
 
 
-        //efunbox://com.edufound.reader/main?
     }
 
     @Override

+ 113 - 0
app/src/main/java/com/edufound/reader/activity/TmailPayActivity.java

@@ -0,0 +1,113 @@
+package com.edufound.reader.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+
+import com.edufound.reader.R;
+import com.edufound.reader.annotation.BindView;
+import com.edufound.reader.base.BaseMvpActivity;
+import com.edufound.reader.contract.TmailPayContract;
+import com.edufound.reader.popwindow.PopWindowUtil;
+import com.edufound.reader.presenter.TmailPayPresenter;
+
+import io.reactivex.rxjava3.functions.Consumer;
+
+public class TmailPayActivity extends BaseMvpActivity<TmailPayPresenter> implements TmailPayContract.View {
+
+    Activity mActivity;
+
+    @BindView(id = R.id.activity_pay_tmail_tomyorder)
+    ImageView mToMyOrder;
+
+    @BindView(id = R.id.activity_pay_back)
+    ImageView mImgBack;
+    @BindView(id = R.id.activity_pay_tmail_item_layouts)
+    LinearLayout mItemFrame;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_pay_tmail;
+    }
+
+    @Override
+    public void initView() {
+        mActivity = this;
+        mPresenter = new TmailPayPresenter();
+        mPresenter.attachView(this);
+        addUiClickListener(mImgBack, o -> {
+            mActivity.finish();
+        });
+        addUiClickListener(mToMyOrder, o -> {
+            PopWindowUtil.showMyOrderWindow(mActivity, getRootView());
+        });
+        mPresenter.getProductInfo();
+    }
+
+    @Override
+    public void onGetDisconnect() {
+
+    }
+
+    @Override
+    public void onGetMobileConnect() {
+
+    }
+
+    @Override
+    public void onGetWifiConnect() {
+
+    }
+
+    @Override
+    public void showLoading() {
+
+    }
+
+    @Override
+    public void hideLoading() {
+
+    }
+
+    @Override
+    public void onError(String errMessage) {
+
+    }
+
+    @Override
+    public Activity getActivity() {
+        return mActivity;
+    }
+
+    @Override
+    public ViewGroup getRootView() {
+        return findViewById(android.R.id.content);
+    }
+
+    @Override
+    public void getProductSuccess() {
+        mPresenter.initPayItem(mItemFrame);
+    }
+
+    @Override
+    public void addUiClick(View view, Consumer onNext) {
+        addUiClickListener(view, onNext);
+    }
+
+    @Override
+    public void isPaySuccess() {
+        Toast.makeText(getActivity(), "支付成功", Toast.LENGTH_SHORT).show();
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        mPresenter.onActivityResult(requestCode, resultCode, data);
+        super.onActivityResult(requestCode, resultCode, data);
+    }
+}

+ 14 - 2
app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java

@@ -42,6 +42,7 @@ 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 {
@@ -123,6 +124,9 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             //义方渠道
             mCancellationLayout.setVisibility(View.VISIBLE);
             mLoginOut.setVisibility(View.VISIBLE);
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            mSwitchLayout.setVisibility(View.GONE);
+            mBindWeChat.setVisibility(View.GONE);
         }
         addUiClickListener(mLoginOut, o -> {
             Logger.e("mLoginOut");
@@ -185,6 +189,7 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             }
             mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
             mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
+            Consts.getmConstsUserBean().setGender("1");
             mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
 
         });
@@ -195,6 +200,7 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             }
             mGenderMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_bg);
             mGenderFeMale.setBackgroundResource(R.drawable.activity_userinfo_setting_item_sex_true_bg);
+            Consts.getmConstsUserBean().setGender("0");
             mPresenter.upadteMyInfo(Consts.getmConstsUserBean());
         });
         addUiClickListener(mGrade, o -> {
@@ -248,9 +254,15 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
                 return false;
             }
         });
-        if (Consts.getmConstsBaiDuUserBean() != null) {
-            mUserNum.setText("账号:" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
+
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU)) {
+            if (Consts.getmConstsBaiDuUserBean() != null) {
+                mUserNum.setText("账号:" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
+            }
+        } else {
+            mUserNum.setVisibility(View.INVISIBLE);
         }
+
         mPresenter.getMyInfo();
     }
 

+ 8 - 0
app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java

@@ -127,6 +127,11 @@ public class UserApiServerImpl implements userApiServer {
     public void registerMobileByVCode(Activity activity, String userJson, Callback callback) {
         OkHttpClient.doPostAsync(activity, HttpInfo.Builder().addParamJson(userJson).setUrl(API + "/user/mobile"), callback);
     }
+
+    @Override
+    public void getTMailPhone(String json, Callback callback) {
+        OkHttpClient.doPostAsync(HttpInfo.Builder().addParamJson(json).setUrl(API + "/user/getMobile"), callback);
+    }
 }
 
 
@@ -208,4 +213,7 @@ interface userApiServer {
      * 手机号验证码注册
      */
     void registerMobileByVCode(Activity activity, String userJson, Callback callback);
+
+
+    void getTMailPhone(String json, Callback callback);
 }

+ 173 - 53
app/src/main/java/com/edufound/reader/base/BaseActivity.java

@@ -6,8 +6,6 @@ import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.annotation.SuppressLint;
 import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Build;
@@ -26,15 +24,26 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.alibaba.ailabs.genie.assistant.sdk.asr.ASRClient;
+import com.alibaba.ailabs.genie.assistant.sdk.asr.ASRCommandReturn;
+import com.alibaba.ailabs.genie.assistant.sdk.asr.AppContextData;
+import com.alibaba.ailabs.genie.assistant.sdk.asr.OnASRCommandListener;
+import com.alibaba.ailabs.genie.assistant.sdk.asr.OnGetMediaPolicyListener;
 import com.alibaba.fastjson.JSONObject;
 import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.botsdk.BotIntent;
 import com.baidu.duer.botsdk.IAccountChargeMsgListener;
+import com.baidu.duer.membersdk.MemberSdkManager;
+import com.baidu.duer.membersdk.view.FloatingView;
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.bean.BaiDuUserInfo;
+import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.SignBean;
 import com.edufound.reader.bean.UserBean;
@@ -45,6 +54,7 @@ import com.edufound.reader.receiver.HomeKeyEventReceiver;
 import com.edufound.reader.receiver.NetworkChangeReceiver;
 import com.edufound.reader.receiver.ShowFollowReceiver;
 import com.edufound.reader.receiver.ShowPageLoadingReceiver;
+import com.edufound.reader.tmailsdk.TMailSDKUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.EfunboxUtil;
@@ -58,8 +68,6 @@ import com.jakewharton.rxbinding4.view.RxView;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
 import com.orhanobut.logger.Logger;
-import com.umeng.analytics.MobclickAgent;
-import com.umeng.commonsdk.UMConfigure;
 
 import java.io.IOException;
 import java.lang.reflect.Field;
@@ -69,8 +77,6 @@ import java.util.HashMap;
 import java.util.Map;
 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;
 import io.reactivex.rxjava3.disposables.Disposable;
@@ -80,6 +86,8 @@ public abstract class BaseActivity extends AppCompatActivity {
 
     private static final int SHOW_FOLLOW = 0x5512;
     private static final int SHOW_FIRST_TIP = 0x5513;
+    private static final int TMAIL_INIT_SUCCESS = 0x5514;
+    private static final int TMAIL_INIT_ERROR = 0x5515;
     public CompositeDisposable mCompositeDisposable;
     //按home键的receiver
     HomeKeyEventReceiver mHomeReceiver;
@@ -88,9 +96,11 @@ public abstract class BaseActivity extends AppCompatActivity {
     Gson mGson;
 
     View mFirstIntoView;
-
     ImageView pageLoading;
     boolean pageLoadingShow = false;
+    //百度浮窗
+    private FloatingView mFloating;
+    private boolean hasResume = false;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -102,6 +112,13 @@ public abstract class BaseActivity extends AppCompatActivity {
         initBase();
         bindViews(this);
         initView();
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            mAliTVASRManager = new ASRClient(this);
+            if (Consts.getTmailUserId().equals("-1")) {
+                TMailSDKUtil.getUserId(getBaseContext());
+                TMailSDKUtil.getDevieId(getBaseContext());
+            }
+        }
     }
 
     void initBase() {
@@ -138,21 +155,6 @@ public abstract class BaseActivity extends AppCompatActivity {
     }
 
 
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        EApplication.mActivityList.remove(this);
-        BotRegisterListener.removeListener(mBotIntentCallBack);
-        clearDisposable();
-        unregisterReceiver(mHomeReceiver);
-        NetworkChangeReceiver.unRegisterReceiver(this);
-        NetworkChangeReceiver.unRegisterObserver(NetStateChangeObserver);
-        ShowFollowReceiver.unRegisterReceiver(this);
-        ShowFollowReceiver.unRegisterObserver(showFollow);
-        ShowPageLoadingReceiver.unRegisterReceiver(this);
-        ShowPageLoadingReceiver.unRegisterObserver(pageLoadingReceiver);
-    }
-
     /**
      * 设置布局
      *
@@ -260,14 +262,6 @@ public abstract class BaseActivity extends AppCompatActivity {
     }
 
 
-    BroadcastReceiver loginReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            onLoginSuccess();
-        }
-    };
-
-
     public ViewGroup getRootView() {
         return findViewById(android.R.id.content);
     }
@@ -311,6 +305,7 @@ public abstract class BaseActivity extends AppCompatActivity {
         @Override
         public boolean handleMessage(@NonNull Message message) {
             switch (message.what) {
+                //region Description 显示花朵
                 case SHOW_FOLLOW:
                     ImageView imageView = new ImageView(getBaseContext());
                     imageView.setImageResource(R.drawable.testhua);
@@ -350,6 +345,8 @@ public abstract class BaseActivity extends AppCompatActivity {
                     });
                     animatorSet.start();
                     break;
+                //endregion
+                //region 第一次进入时提示
                 case SHOW_FIRST_TIP:
                     if (mFirstIntoView == null) {
                         mFirstIntoView = LayoutInflater.from(getBaseContext()).inflate(R.layout.first_tip, null);
@@ -394,6 +391,21 @@ public abstract class BaseActivity extends AppCompatActivity {
 
                     MMKVUtil.getInstance().encode("first_into", false);
                     break;
+                //endregion
+
+
+                //region 天猫精灵初始化
+                case TMAIL_INIT_SUCCESS:
+                    //天猫初始化成功
+                    Toast.makeText(getBaseContext(), message.obj.toString(), Toast.LENGTH_SHORT).show();
+
+
+                    break;
+                case TMAIL_INIT_ERROR:
+                    //天猫初始化失败
+                    Toast.makeText(getBaseContext(), message.obj.toString(), Toast.LENGTH_SHORT).show();
+                    break;
+                //endregion
             }
             return false;
         }
@@ -465,7 +477,85 @@ public abstract class BaseActivity extends AppCompatActivity {
     }
 
 
-    //百度的回调逻辑代码块
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            mAliTVASRManager.release();
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            Logger.e("隐藏弹窗");
+            hasResume = false;
+            if (mFloating != null) {
+                // 隐藏
+                mFloating.dismissFloatView();
+            }
+
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            try {
+                mAliTVASRManager.setOnASRCommandListener(mASRCommandListener);
+                mAliTVASRManager.setASRListenerType(OnASRCommandListener.ASRListenerType.DEFAULT_LISTENER);
+                mAliTVASRManager.setAliTVASREnable(true);
+                mAliTVASRManager.setOnGetMediaPolicyListener(mOnGetMediaPolicyListener);
+                mAliTVASRManager.init(getBaseContext(), true);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            Logger.e("显示弹窗");
+            hasResume = true;
+            if (mFloating != null) {
+                mFloating.dismissFloatView();
+            }
+            mFloating = MemberSdkManager.getInstance().showFloatView(this);
+            Logger.e("显示弹窗mFloating");
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            mAliTVASRManager.release();
+        }
+        EApplication.mActivityList.remove(this);
+        BotRegisterListener.removeListener(mBotIntentCallBack);
+        clearDisposable();
+        unregisterReceiver(mHomeReceiver);
+        NetworkChangeReceiver.unRegisterReceiver(this);
+        NetworkChangeReceiver.unRegisterObserver(NetStateChangeObserver);
+        ShowFollowReceiver.unRegisterReceiver(this);
+        ShowFollowReceiver.unRegisterObserver(showFollow);
+        ShowPageLoadingReceiver.unRegisterReceiver(this);
+        ShowPageLoadingReceiver.unRegisterObserver(pageLoadingReceiver);
+    }
+
+    ShowFollowReceiver.ShowFollow showFollow = new ShowFollowReceiver.ShowFollow() {
+        @Override
+        public void showFollow(Intent intent) {
+            showFollowCountAnim(intent.getStringExtra("follow_count"));
+        }
+    };
+
+    ShowPageLoadingReceiver.PageLoading pageLoadingReceiver = new ShowPageLoadingReceiver.PageLoading() {
+        @Override
+        public void show(Intent intent) {
+            showPageLoading();
+        }
+
+        @Override
+        public void hide(Intent intent) {
+            hidePageLoading();
+        }
+    };
+
+
+    //region Description 百度的回调逻辑代码块
     protected void botHandleIntent(BotIntent intent, String customData) {
     }
 
@@ -518,6 +608,7 @@ public abstract class BaseActivity extends AppCompatActivity {
     IBotIntentCallback mBotIntentCallBack = new IBotIntentCallback() {
         @Override
         public void handleIntent(BotIntent intent, String customData) {
+            MemberSdkManager.getInstance().handleIntent(intent, customData);
             Logger.e("fragment---intent.name:" + intent.name);
             if (intent.name.equals("all_login")) {
                 //用户主动要求登录
@@ -679,38 +770,67 @@ public abstract class BaseActivity extends AppCompatActivity {
 
         }
     };
+    //endregion
 
-    @Override
-    protected void onResume() {
-        super.onResume();
-//        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-//            if (!Consts.getIsNeedLogin()) {
-//                BotRegisterListener.getBaiDuVipInfo();
-//            }
-//        }
-    }
 
-    @Override
-    protected void onPause() {
-        super.onPause();
-    }
+    //region Description 天猫精灵的代码
+    private ASRClient mAliTVASRManager;
 
-    ShowFollowReceiver.ShowFollow showFollow = new ShowFollowReceiver.ShowFollow() {
+    OnASRCommandListener mASRCommandListener = new OnASRCommandListener() {
         @Override
-        public void showFollow(Intent intent) {
-            showFollowCountAnim(intent.getStringExtra("follow_count"));
+        public void onASRStatusUpdated(ASRStatus asrStatus, Bundle bundle) {
+            Logger.e("mASRCommandListener");
         }
-    };
 
-    ShowPageLoadingReceiver.PageLoading pageLoadingReceiver = new ShowPageLoadingReceiver.PageLoading() {
         @Override
-        public void show(Intent intent) {
-            showPageLoading();
+        public void onASRServiceStatusUpdated(ASRServiceStatus asrServiceStatus) {
+            Logger.e("onASRServiceStatusUpdated");
+            Message message = new Message();
+            if (asrServiceStatus == ASRServiceStatus.ASR_SERVICE_STATUS_CONNECTED) {
+                message.what = TMAIL_INIT_SUCCESS;
+                message.obj = "语音服务注册成功...(" + Thread.currentThread().getId() + ")";
+            } else {
+                message.what = TMAIL_INIT_ERROR;
+                message.obj = "语音服务注册失败...(" + Thread.currentThread().getId() + ")";
+            }
+            baseHandler.dispatchMessage(message);
         }
 
+
+        /**
+         * 重要!!!接收到有限的语音指令结果并进行处理。
+         */
         @Override
-        public void hide(Intent intent) {
-            hidePageLoading();
+        public ASRCommandReturn onNLUResult(String commandDomain, String command, String commandParams, Bundle nlpResult) {
+            Logger.e("ASRCommandReturn");
+            return null;
+        }
+
+        @Override
+        public void getAppContextData(AppContextData appContextData) {
+            Logger.e("AppContextData");
+        }
+
+        @Override
+        public Bundle getSceneInfo(Bundle bundle) {
+            return null;
+        }
+
+        @Override
+        public Bundle asrToClient(Bundle bundle) {
+            return null;
         }
     };
+
+
+    OnGetMediaPolicyListener mOnGetMediaPolicyListener = new OnGetMediaPolicyListener() {
+        @Override
+        public int onGetMediaPolicy() {
+            return OnGetMediaPolicyListener.POLICY_CALL_PHONE;
+        }
+    };
+
+    //endregion
+
+
 }

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

@@ -1,10 +1,16 @@
 package com.edufound.reader.botsdk;
 
+import android.content.Context;
+import android.widget.ImageView;
 import android.widget.Toast;
 
 import com.baidu.duer.botsdk.BotIdentity;
 import com.baidu.duer.botsdk.BotIntent;
 import com.baidu.duer.botsdk.IBotMessageListener;
+import com.baidu.duer.membersdk.MemberSdkManager;
+import com.baidu.duer.membersdk.imageloader.IImageLoaderInterface;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.util.Consts;
@@ -138,5 +144,16 @@ public class BotMessageListener implements IBotMessageListener {
     public void onRegisterSucceed() {
 //        Toast.makeText(Consts.getmApplicAtion(), "注册百度sdk成功", Toast.LENGTH_LONG).show();
 //        CusToast.getInstance(Consts.getmApplicAtion()).show("注册百度sdk成功", 2000);
+        MemberSdkManager.getInstance().setImageLoader(new IImageLoaderInterface() {
+            @Override
+            public void loadImage(Context context, ImageView imageView, String imageUrl, int placeHolder) {
+                Glide.with(context)
+                        .load(imageUrl)
+                        .placeholder(placeHolder)
+                        .diskCacheStrategy(DiskCacheStrategy.ALL)
+                        .into(imageView);
+            }
+        });
+
     }
 }

+ 38 - 0
app/src/main/java/com/edufound/reader/contract/TmailPayContract.java

@@ -0,0 +1,38 @@
+package com.edufound.reader.contract;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.widget.LinearLayout;
+
+import com.edufound.reader.base.BaseView;
+import com.okhttplib.callback.Callback;
+
+import io.reactivex.rxjava3.functions.Consumer;
+
+public interface TmailPayContract {
+    interface Model {
+//        void isPay(Activity activity, String orderId, Callback callback);
+
+        void TMailPayGenie(Activity activity, String json, Callback callback);
+    }
+
+    interface View extends BaseView {
+        void getProductSuccess();
+
+        void addUiClick(android.view.View view, Consumer onNext);
+
+        void isPaySuccess();
+    }
+
+    interface Presenter {
+        void getProductInfo();
+
+        void activityDestory();
+
+        void initPayItem(LinearLayout itemFrame);
+
+        void isPaySuccess();
+
+        void onActivityResult(int requestCode, int resultCode, Intent data);
+    }
+}

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

@@ -30,6 +30,7 @@ import java.util.HashMap;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
+
 import io.reactivex.rxjava3.annotations.Nullable;
 import io.reactivex.rxjava3.functions.Consumer;
 
@@ -52,7 +53,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);
+        GlideUtils.loadImageSizeKipMemoryCache(getContext(), "http://reader-apk.ai160.com/reader-apk/res/character_image_1.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);

+ 3 - 4
app/src/main/java/com/edufound/reader/fragment/MyTabFragment.java

@@ -34,6 +34,7 @@ import com.edufound.reader.util.TimeUtil;
 import com.jakewharton.rxbinding4.view.RxView;
 
 import androidx.annotation.RequiresApi;
+
 import io.reactivex.rxjava3.functions.Consumer;
 
 public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> implements MyTabFragmentContract.View {
@@ -103,9 +104,6 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
         mPresenter.getMyInfo();
 
 //        mPresenter.getIsBuy();
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
-            mPresenter.getAuth();
-        }
 
 
     }
@@ -211,6 +209,7 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
     @Override
     public void onResume() {
         mPresenter.fragmentResume();
+
         super.onResume();
     }
 
@@ -244,7 +243,7 @@ public class MyTabFragment extends BaseMvpFragment<MyTabFragmentPresenter> imple
         mFlowerCount.setText(String.valueOf(bean.getIntegralAmount()));
         if (Integer.valueOf(bean.getUnreadAmount()) <= 0) {
             mUnReadIcon.setVisibility(View.INVISIBLE);
-        }else{
+        } else {
             mUnReadIcon.setVisibility(View.VISIBLE);
         }
 

+ 13 - 1
app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java

@@ -34,6 +34,7 @@ import java.util.HashMap;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
+
 import io.reactivex.rxjava3.annotations.Nullable;
 
 public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresenter> implements RecommendFragmentContract.View {
@@ -205,9 +206,20 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
     public void onResume() {
         mPresenter.fragmentResume(mRecyclerView);
         if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
-            if (Consts.getmConstsBaiDuUserBean() != null && EfunboxUtil.checkIsVip()) {
+            if (Consts.getmConstsBaiDuUserBean() != null) {
                 isUserVip.setVisibility(View.INVISIBLE);
             }
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) || Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            isUserVip.setEnabled(false);
+            isUserVip.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    if (Consts.isIsYFVip()) {
+                        isUserVip.setVisibility(View.INVISIBLE);
+                    }
+                    isUserVip.setEnabled(true);
+                }
+            }, 500);
         }
         super.onResume();
 

+ 3 - 0
app/src/main/java/com/edufound/reader/model/MainModel.java

@@ -9,4 +9,7 @@ import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
 
 public class MainModel implements MainContract.Model {
+
+
+
 }

+ 23 - 0
app/src/main/java/com/edufound/reader/model/TmailPayModel.java

@@ -0,0 +1,23 @@
+package com.edufound.reader.model;
+
+import android.app.Activity;
+
+import com.edufound.reader.contract.TmailPayContract;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.OkHttpClient;
+import com.okhttplib.HttpInfo;
+import com.okhttplib.callback.Callback;
+
+public class TmailPayModel implements TmailPayContract.Model {
+    private final String API = Consts.getFinalApi();
+
+    @Override
+    public void TMailPayGenie(Activity activity, String json, Callback callback) {
+        OkHttpClient.doPostAsync(activity, new HttpInfo.Builder().setUrl(API + "/order/genie").addParamJson(json), callback);
+    }
+
+//    @Override
+//    public void isPay(Activity activity, String orderId, Callback callback) {
+//        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/order/info/" + orderId), callback);
+//    }
+}

+ 63 - 34
app/src/main/java/com/edufound/reader/presenter/LoginAlertPresenter.java

@@ -16,8 +16,10 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.edufound.reader.activity.WebActivity;
+import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.base.BasePresenter;
+import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.LoginAlertContract;
@@ -140,41 +142,42 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                     return;
                 }
 //                if (Integer.valueOf(inputVCode) == getVCode || Integer.valueOf(inputVCode) == 9999) {
-                    //输入的和返回的是一样的
-                    //请求接口,根据phoneNum,Integer.valueOf(inputVCode)
-                    Map<String, String> params = new HashMap<>();
-                    params.put("channel", Consts.getUmengChannel());
-                    params.put("deviceCode", DeviceUuidFactory.getUuid().toString());
-                    params.put("mobileNo", phoneNum);
-                    params.put("verifyCode", inputVCode);
-                    params.put("channel", Consts.getUmengChannel());
-                    params.put("verify", "true");
-                    if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
-                        //如果没有,默认给一年级
-                        params.put("grade", "PRIMARY_FIRST_GRADE");
-                    } else {
-                        params.put("grade", MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE));
-                    }
-                    mUserApi.registerMobileByVCode(mView.getActivity(), new Gson().toJson(params), new Callback() {
-                        @Override
-                        public void onSuccess(HttpInfo info) throws IOException {
+                //输入的和返回的是一样的
+                //请求接口,根据phoneNum,Integer.valueOf(inputVCode)
+                Map<String, String> params = new HashMap<>();
+                params.put("channel", Consts.getUmengChannel());
+                params.put("deviceCode", DeviceUuidFactory.getUuid().toString());
+                params.put("mobileNo", phoneNum);
+                params.put("verifyCode", inputVCode);
+                params.put("channel", Consts.getUmengChannel());
+                params.put("verify", "true");
+                if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
+                    //如果没有,默认给一年级
+                    params.put("grade", "PRIMARY_FIRST_GRADE");
+                } else {
+                    params.put("grade", MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE));
+                }
+                mUserApi.registerMobileByVCode(mView.getActivity(), new Gson().toJson(params), new Callback() {
+                    @Override
+                    public void onSuccess(HttpInfo info) throws IOException {
 //                            Logger.e("注册成功:" + info.getRetDetail());
-                            Toast.makeText(mView.getActivity(), "注册成功", Toast.LENGTH_SHORT).show();
-                            HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
-                            }.getType());
-                            Consts.setUID(bean.getData().getUid());
-                            //用户是否登录,登录了,创建Consts的userbean
-                            Consts.setmConstsUserBean(bean.getData());
-                            mView.getActivity().finish();
-                        }
-
-                        @Override
-                        public void onFailure(HttpInfo info) throws IOException {
-                            Logger.e("注册失败:" + info.getRetDetail());
-                            Logger.e("注册失败:" + info.getParamJson());
-                            Toast.makeText(mView.getActivity(), "注册失败," + info.getRetDetail(), Toast.LENGTH_SHORT).show();
-                        }
-                    });
+                        Toast.makeText(mView.getActivity(), "注册成功", Toast.LENGTH_SHORT).show();
+                        HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
+                        }.getType());
+                        Consts.setUID(bean.getData().getUid());
+                        //用户是否登录,登录了,创建Consts的userbean
+                        Consts.setmConstsUserBean(bean.getData());
+                        getYFVip();
+
+                    }
+
+                    @Override
+                    public void onFailure(HttpInfo info) throws IOException {
+                        Logger.e("注册失败:" + info.getRetDetail());
+                        Logger.e("注册失败:" + info.getParamJson());
+                        Toast.makeText(mView.getActivity(), "注册失败," + info.getRetDetail(), Toast.LENGTH_SHORT).show();
+                    }
+                });
 
 //                } else {
 //                    Toast.makeText(mView.getActivity(), "验证码输入错误", Toast.LENGTH_SHORT).show();
@@ -188,6 +191,32 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
         }
     }
 
+    private void getYFVip() {
+
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
+            //义方渠道检查权限
+            if (Consts.getmConstsUserBean() != null) {
+                OrderApiServerImpl api = new OrderApiServerImpl();
+                api.getAuth(mView.getActivity(), new Callback() {
+                    @Override
+                    public void onSuccess(HttpInfo info) throws IOException {
+                        HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
+                        }.getType());
+                        Logger.e("    info.getRetDetail():" + info.getRetDetail());
+                        Logger.e("bean.getData():" + bean.getData());
+                        Consts.setIsYFVip(true);
+                        mView.getActivity().finish();
+                    }
+
+                    @Override
+                    public void onFailure(HttpInfo info) throws IOException {
+
+                    }
+                });
+            }
+        }
+    }
+
     @Override
     public void activityDestory() {
         mLoginAlertHandler.removeMessages(LoginAlertModel.CHANGE_VCODE_TEXT);

+ 42 - 6
app/src/main/java/com/edufound/reader/presenter/MainPresenter.java

@@ -12,9 +12,11 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.edufound.reader.R;
+import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
+import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.SignBean;
 import com.edufound.reader.bean.UserBean;
@@ -33,6 +35,7 @@ import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.MMKVEncodeKey;
 import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.SizeUtils;
+import com.edufound.reader.util.TimeUtil;
 import com.google.gson.reflect.TypeToken;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
@@ -52,6 +55,7 @@ import androidx.fragment.app.FragmentTransaction;
 public class MainPresenter extends BasePresenter<MainContract.View> implements MainContract.Presenter {
     MainModel mModel;
     UserApiServerImpl mUserApi;
+    OrderApiServerImpl mOrderApi;
     MyTabFragment mUserFragment;
     RecommendFragment mRecommendFragment;
     FragmentManager mFragmentManager;
@@ -62,6 +66,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
     public MainPresenter(FragmentManager fragmentManager) {
         mModel = new MainModel();
         mUserApi = new UserApiServerImpl();
+        mOrderApi = new OrderApiServerImpl();
         mFragmentManager = fragmentManager;
         mUserFragment = new MyTabFragment();
         mRecommendFragment = new RecommendFragment(0);
@@ -192,6 +197,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
                             //选择过年纪。无处理
                         }
 //                    registerMobile("18655365222");
+                        getYFVip();
                         mView.setCheckIndex();
                     } else {
                         HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
@@ -204,11 +210,19 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
                         mUserApi.loginSign(mView.getActivity(), new Callback() {
                             @Override
                             public void onSuccess(HttpInfo info) throws IOException {
-                                HttpResultBean<SignBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<SignBean>>() {
-                                }.getType());
-                                if (bean.getData().getIsSign()) {
-                                    CusToast.getInstance(mView.getActivity()).show("恭喜签到成功\n奖励" + bean.getData().getCount() + "朵小红花", 2000);
+                                try {
+                                    HttpResultBean<SignBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<SignBean>>() {
+                                    }.getType());
+                                    if (bean.getData().getIsSign()) {
+                                        CusToast.getInstance(mView.getActivity()).show("恭喜签到成功\n奖励" + bean.getData().getCount() + "朵小红花", 2000);
+                                    }
+                                    Logger.e("loginSign:-----loginSign---loginSign---loginSign");
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                } finally {
+                                    getYFVip();
                                 }
+
                             }
 
                             @Override
@@ -236,6 +250,29 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
         });
     }
 
+    private void getYFVip() {
+
+        if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) || Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            //义方渠道检查权限
+            if (Consts.getmConstsUserBean() != null) {
+                mOrderApi.getAuth(mView.getActivity(), new Callback() {
+                    @Override
+                    public void onSuccess(HttpInfo info) throws IOException {
+                        HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
+                        }.getType());
+                        Logger.e("    info.getRetDetail():" + info.getRetDetail());
+                        Logger.e("bean.getData():" + bean.getData());
+                        Consts.setIsYFVip(true);
+                    }
+
+                    @Override
+                    public void onFailure(HttpInfo info) throws IOException {
+
+                    }
+                });
+            }
+        }
+    }
 
     @Override
     public void registerMobile(String mobileNo) {
@@ -301,11 +338,10 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
             case KeyEvent.KEYCODE_BACK:
             case KeyEvent.KEYCODE_ESCAPE:
                 PopWindowUtil.showExitAppWindow(mView.getActivity(), mView.getRootView());
-
                 return true;
         }
 
-        return true;
+        return false;
     }
 
 }

+ 5 - 2
app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java

@@ -90,6 +90,7 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
     public void setGridData(GridLayout gridLayout, FrameLayout norecordlayout) {
         if (mDataList == null || mDataList.size() <= 0) {
+            Logger.e("没有作品--");
             norecordlayout.setVisibility(View.VISIBLE);
             gridLayout.setVisibility(View.GONE);
             return;
@@ -341,13 +342,12 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
             public void onSuccess(HttpInfo info) throws IOException {
                 HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
                 }.getType());
-                Logger.e("bean.getData():" + bean.getData());
                 mView.getIsBuySuccess(TimeUtil.timeStamp2Date(Long.valueOf(bean.getData()), "yyyy-MM-dd"));
             }
 
             @Override
             public void onFailure(HttpInfo info) throws IOException {
-
+                getAuth();
             }
         });
     }
@@ -409,6 +409,7 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
     @Override
     public void fragmentResume() {
+        Logger.e("Consts.getUmengChannel():" + Consts.getUmengChannel());
         if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             if (Consts.getmConstsBaiDuUserBean() == null) {
                 return;
@@ -417,6 +418,8 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
                 //是VIP
                 mView.getIsBuySuccess(TimeUtil.getDateFromSeconds(String.valueOf(Consts.getmConstsBaiDuUserBean().getUserInfo().getEndTimestamp())));
             }
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) || Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            getAuth();
         }
     }
 

+ 231 - 0
app/src/main/java/com/edufound/reader/presenter/TmailPayPresenter.java

@@ -0,0 +1,231 @@
+package com.edufound.reader.presenter;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Handler;
+import android.os.Message;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.edufound.reader.R;
+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.PayResultBean;
+import com.edufound.reader.contract.TmailPayContract;
+import com.edufound.reader.model.PayModel;
+import com.edufound.reader.model.TmailPayModel;
+import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.GlideUtils;
+import com.google.gson.reflect.TypeToken;
+import com.okhttplib.HttpInfo;
+import com.okhttplib.callback.Callback;
+import com.orhanobut.logger.Logger;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class TmailPayPresenter extends BasePresenter<TmailPayContract.View> implements TmailPayContract.Presenter {
+    TmailPayModel mModel;
+    OrderApiServerImpl mOrderApi;
+    List<PayResultBean> mPayResult;
+    Map<String, String> createOrderMap;
+    String nowOrderId = null;
+
+    public TmailPayPresenter() {
+        this.mModel = new TmailPayModel();
+        mOrderApi = new OrderApiServerImpl();
+    }
+
+    @Override
+    public void getProductInfo() {
+        mOrderApi.getProductListInfo(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 activityDestory() {
+        if (handler != null) {
+            handler.removeMessages(1);
+            handler.removeMessages(2);
+            handler = null;
+        }
+    }
+
+    @Override
+    public void initPayItem(LinearLayout itemFrame) {
+        Logger.e("initPayItem");
+        for (int i = 0; i < mPayResult.size(); i++) {
+            Message message = new Message();
+            message.obj = itemFrame;
+            message.what = 1;
+            message.arg1 = i;
+            handler.sendMessageDelayed(message, 50 * i);
+        }
+
+    }
+
+    @Override
+    public void isPaySuccess() {
+//        mModel.isPay(mView.getActivity(), nowOrderId, new Callback() {
+//            @Override
+//            public void onSuccess(HttpInfo info) throws IOException {
+//                HttpResultBean<PayResultBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<PayResultBean>>() {
+//                }.getType());
+//                Logger.e("bean.get:" + info.getRetDetail());
+//                Logger.e("status:" + bean.getData().getPayStatus());
+//                if (bean.getData().getPayStatus().equals("SUCCESS")) {
+//                    handler.removeMessages(2);
+//                } else {
+//                    handler.sendEmptyMessageDelayed(2, 3000);
+//                }
+//
+//            }
+//
+//            @Override
+//            public void onFailure(HttpInfo info) throws IOException {
+//
+//            }
+//        });
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == 1234 && resultCode == Activity.RESULT_OK) {
+            if (data != null) {
+                boolean isPaySuccess = data.getBooleanExtra("isPaySuccess", false);
+                String paySuccessDataJson = data.getStringExtra("paySuccessData");
+                int payErrorCode = data.getIntExtra("payErrorCode", -1);
+                String payErrorMsg = data.getStringExtra("payErrorMsg");
+                Logger.e("qrcode, isPaySuccess=" + isPaySuccess +
+                        ";paySuccessDataJson=" + paySuccessDataJson +
+                        ";payErrorCode=" + payErrorCode +
+                        ";payErrorMsg=" + payErrorMsg);
+            }
+        }
+    }
+
+    void initItem(LinearLayout itemFrame, int position) {
+        View view = LayoutInflater.from(mView.getActivity()).inflate(R.layout.activity_pay_tmail_item, null);
+        view.setLayoutParams(new LinearLayout.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 1));
+        TmailPayPresenter.PayItemHolder holder = new TmailPayPresenter.PayItemHolder(view);
+        holder.mTitle.setText(mPayResult.get(position).getTitle());
+        holder.mPayMoney.setText(String.valueOf(Double.parseDouble(mPayResult.get(position).getPrice()) / 100));
+        holder.mRecommend.setVisibility(View.VISIBLE);
+        double a = (Double.parseDouble(mPayResult.get(position).getOriginPrice()) / 100);
+        double b = (Double.parseDouble(mPayResult.get(position).getPrice()) / 100);
+        holder.mOriginPrice.setText("原价:" + a);
+        if (mPayResult.get(position).getPayType().equals("YEAR")) {
+            holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmail_item_year);
+        } else if (mPayResult.get(position).getPayType().equals("MONTH")) {
+            holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmal_item_month);
+            holder.mRecommend.setVisibility(View.INVISIBLE);
+        } else {
+            holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmal_item_month);
+            holder.mRecommend.setVisibility(View.INVISIBLE);
+        }
+        view.setTag(holder);
+
+        mView.addUiClick(view, o -> {
+            Logger.e("选择了...." + ((TmailPayPresenter.PayItemHolder) view.getTag()).mPayMoney.getText().toString());
+            Map<String, String> params = new HashMap<>();
+            params.put("productId", mPayResult.get(position).getId());
+            params.put("channel", Consts.getUmengChannel());
+            params.put("payType", mPayResult.get(position).getPayType());
+            params.put("uid", Consts.getmConstsUserBean().getUid());
+            params.put("first", "false");
+            mModel.TMailPayGenie(mView.getActivity(), ((BaseActivity) mView.getActivity()).getGson().toJson(params), new Callback() {
+                @Override
+                public void onSuccess(HttpInfo info) throws IOException {
+                    Logger.e("创建订单返回信息成功:" + info.getRetDetail());
+                    Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
+                    try {
+                        JSONObject object = new JSONObject(info.getRetDetail());
+                        JSONObject json = object.getJSONObject("data");
+                        Logger.e("json:" + json);
+                        TMailSDKUtil.tmailPay(mView.getActivity(), json.toString());
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
+
+                }
+
+                @Override
+                public void onFailure(HttpInfo info) throws IOException {
+                    Logger.e("创建订单返回信息失败:" + info.getRetDetail());
+                    Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
+                    Toast.makeText(mView.getActivity(), "创建订单失败", Toast.LENGTH_SHORT).show();
+                }
+            });
+
+
+        });
+        itemFrame.addView(view);
+        if (position >= mPayResult.size() - 1) {
+//            Logger.e("position:" + position);
+//            Logger.e("mPayResult.size():" + mPayResult.size());
+//            itemFrame.getChildAt(0).performClick();
+        }
+    }
+
+    Handler handler = new Handler(new Handler.Callback() {
+        @Override
+        public boolean handleMessage(@NonNull Message message) {
+            switch (message.what) {
+                case 1:
+                    initItem(((LinearLayout) message.obj), message.arg1);
+                    break;
+                case 2:
+                    isPaySuccess();
+                    break;
+            }
+            return false;
+        }
+    });
+
+    class PayItemHolder {
+        FrameLayout mConstraintLayoutBg;
+        TextView mTitle;
+        TextView mOriginPrice;
+        TextView mPayMoney;
+        ImageView mRecommend;
+
+        public PayItemHolder(View itemView) {
+            mConstraintLayoutBg = itemView.findViewById(R.id.activity_pay_tmail_item_bg);
+            mTitle = itemView.findViewById(R.id.activity_pay_tmail_item_title);
+            mOriginPrice = itemView.findViewById(R.id.activity_pay_tmail_item_originprice);
+            mPayMoney = itemView.findViewById(R.id.activity_pay_tmail_item_money);
+            mRecommend = itemView.findViewById(R.id.activity_pay_tmail_item_recommend);
+        }
+    }
+}

+ 4 - 0
app/src/main/java/com/edufound/reader/presenter/UserInfoSettingPresenter.java

@@ -46,6 +46,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
 
+                Logger.e("info:" + info.getRetDetail());
                 HttpResultBean<MyInfoBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<MyInfoBean>>() {
                 }.getType());
                 mView.getUserInfoSuccess(bean.getData().getUser());
@@ -67,6 +68,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
 
     @Override
     public void upadteMyInfo(UserBean bean) {
+        Logger.e("jjjjjson:" + ((BaseActivity) mView.getActivity()).getGson().toJson(bean));
         mModel.updateMyInfo(mView.getActivity(), ((BaseActivity) mView.getActivity()).getGson().toJson(bean), new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
@@ -98,6 +100,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
                 Consts.setmConstsUserBean(null);
                 Consts.setUID(Consts.getDefaultUid());
                 mView.loginOutSuccess();
+                Consts.setIsYFVip(false);
             }
 
             @Override
@@ -170,6 +173,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
                 Consts.setmConstsUserBean(null);
                 Consts.setUID(Consts.getDefaultUid());
                 mView.loginOutSuccess();
+                Consts.setIsYFVip(false);
             }
 
             @Override

+ 5 - 0
app/src/main/java/com/edufound/reader/tmailsdk/TMailConstants.java

@@ -0,0 +1,5 @@
+package com.edufound.reader.tmailsdk;
+
+public class TMailConstants {
+    public static String appSecret = "9e8fca6f-37bd-4b90-8e10-1da4a681b5fe";
+}

+ 163 - 0
app/src/main/java/com/edufound/reader/tmailsdk/TMailSDKUtil.java

@@ -0,0 +1,163 @@
+package com.edufound.reader.tmailsdk;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.widget.Toast;
+
+import com.alibaba.ailabs.genie.assistant.sdk.account.UserInfoManager;
+import com.alibaba.ailabs.genie.assistant.sdk.agis.IResponseCallback;
+import com.alibaba.ailabs.genie.authservice.api.AuthProtocolParameters;
+import com.alibaba.ailabs.genie.authservice.api.AuthResponse;
+import com.alibaba.ailabs.genie.authservice.api.IRequestPermissionListener;
+import com.alibaba.ailabs.genie.authservice.api.IRequestPermissions;
+import com.alibaba.genie.waft.gcs.rpc.GenieServiceLoader;
+import com.edufound.reader.activity.LoginAlertActivity;
+import com.edufound.reader.apiserver.UserApiServerImpl;
+import com.edufound.reader.bean.HttpResultBean;
+import com.edufound.reader.bean.UserBean;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.DeviceUuidFactory;
+import com.edufound.reader.util.EfunboxCallBack;
+import com.edufound.reader.util.MMKVEncodeKey;
+import com.edufound.reader.util.MMKVUtil;
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.reflect.TypeToken;
+import com.okhttplib.HttpInfo;
+import com.okhttplib.OkHttpUtil;
+import com.okhttplib.callback.Callback;
+import com.orhanobut.logger.Logger;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class TMailSDKUtil {
+
+    public static void TMailLogin(Context context) {
+        UserApiServerImpl mUserApi = new UserApiServerImpl();
+        String genieAppType = "NATIVE";
+        String genieAppIdentifier = TMailConstants.appSecret;
+        List<String> permissions = new ArrayList<>();
+        permissions.add("profile:phone_number:read");
+//        //Step1 获取授权服务的RPC引用 -- 注意如果此时方法返回null,说明系统中没有授权服务模块,请升级系统版本
+        IRequestPermissions requestPermissions = GenieServiceLoader.load(IRequestPermissions.class);
+//
+//
+        if (requestPermissions == null) {
+            Logger.e("没有授权服务模块,请升级系统版本");
+            return;
+        }
+        //Step2 调用查询授权接口
+        AuthProtocolParameters authProtocolParameters = new AuthProtocolParameters(genieAppType, genieAppIdentifier, permissions);
+        if (requestPermissions != null) {
+            try {
+                requestPermissions.requestPermissions(authProtocolParameters, new IRequestPermissionListener() {
+
+                    @Override
+                    public void authServiceResponse(AuthResponse authResponse) {
+                        Logger.e(" authResponse = " + authResponse);
+                        if (authResponse.isSuccess()) {
+                            //这里返回的token就是API访问令牌
+                            String token = authResponse.getData().getApiAccessToken();
+                            Logger.e("token:" + token);
+                            Gson gson = new Gson();
+                            Map<String, String> map = new HashMap<>();
+                            map.put("accessToken", token);
+                            map.put("deviceOpenId", Consts.getTmailDeviceId());
+                            map.put("userOpenId", Consts.getTmailUserId());
+                            map.put("packageName", Consts.getmApplicAtion().getPackageName());
+                            map.put("deviceCode", DeviceUuidFactory.getUuid());
+                            if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
+                                //如果没有,默认给一年级
+                                map.put("grade", "PRIMARY_FIRST_GRADE");
+                            } else {
+                                map.put("grade", MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE));
+                            }
+                            mUserApi.getTMailPhone(gson.toJson(map), new Callback() {
+                                @Override
+                                public void onSuccess(HttpInfo info) throws IOException {
+                                    Logger.e("info.params:" + info.getParamJson());
+                                    Logger.e("获取天猫手机号成功哦--info:" + info.getRetDetail());
+                                    HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
+                                    }.getType());
+                                    Consts.setmConstsUserBean(bean.getData());
+                                    Consts.setUID(bean.getData().getUid());
+                                    Toast.makeText(context, "登录成功", Toast.LENGTH_SHORT).show();
+                                }
+
+                                @Override
+                                public void onFailure(HttpInfo info) throws IOException {
+                                    Logger.e("info.params:" + info.getParamJson());
+                                    Logger.e("获取天猫手机号失败--info:" + info.getRetDetail());
+                                }
+                            });
+                        } else {
+                            Logger.e("用户拒绝天猫精灵授权,调用自己的手机号登录");
+                            Intent tologin = new Intent(context, LoginAlertActivity.class);
+                            context.startActivity(tologin);
+                        }
+                    }
+                });
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        Intent intent = new Intent();
+        intent.setPackage("com.alibaba.ailabs.genie.smartapp");
+        intent.setAction("com.alibaba.ailabs.genie.authservice.intent.action.AuthPermissionService");
+        context.startService(intent);
+    }
+
+    public static void tmailPay(Activity context, String json) {
+        Intent intent = new Intent("android.intent.action.VIEW",
+                Uri.parse("genie://com.alibaba.ailabs.genie.commonpay/qrcode"));
+        Logger.e("json:" + json);
+        intent.putExtra("data", json);
+        context.startActivityForResult(intent, 1234);
+    }
+
+    public static void getUserId(Context context) {
+        UserInfoManager.getInstance(context).getIdentifciationID("USER_ID", context.getPackageName(), "PACKAGE_NAME", new IResponseCallback() {
+            @Override
+            public void onResponseCallback(int i, int i1, String s) {
+
+                try {
+                    JSONObject jsonObject = new JSONObject(s);
+                    JSONArray array = jsonObject.getJSONArray("commands");
+                    Consts.setTmailUserId(array.getJSONObject(0).getJSONObject("payload").get("openId").toString());
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                }
+
+
+            }
+        });
+    }
+
+    public static void getDevieId(Context context) {
+        UserInfoManager.getInstance(context).getIdentifciationID("DEVICE_ID", context.getPackageName(), "PACKAGE_NAME", new IResponseCallback() {
+            @Override
+            public void onResponseCallback(int i, int i1, String s) {
+                try {
+                    JSONObject jsonObject = new JSONObject(s);
+                    JSONArray array = jsonObject.getJSONArray("commands");
+                    Consts.setTmailDeviceId(array.getJSONObject(0).getJSONObject("payload").get("openId").toString());
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                }
+
+            }
+        });
+    }
+}

+ 31 - 0
app/src/main/java/com/edufound/reader/util/Consts.java

@@ -33,6 +33,8 @@ public class Consts {
 
     private static String defaultUid = "test";
 
+    private static boolean isYFVip = false;
+
 
     private static String recordUpLoadFileUrl = "";
 
@@ -41,6 +43,12 @@ public class Consts {
 
     private static Boolean isNeedLogin = false;
 
+
+    //天猫
+    private static String TMAIL_USER_ID = "-1";
+    private static String TMAIL_DEVICE_ID = "-1";
+
+
     public static Boolean getIsNeedLogin() {
         return isNeedLogin;
     }
@@ -153,4 +161,27 @@ public class Consts {
         Consts.mConstsBaiDuUserBean = mConstsBaiDuUserBean;
     }
 
+    public static boolean isIsYFVip() {
+        return isYFVip;
+    }
+
+    public static void setIsYFVip(boolean isYFVip) {
+        Consts.isYFVip = isYFVip;
+    }
+
+    public static String getTmailUserId() {
+        return TMAIL_USER_ID;
+    }
+
+    public static void setTmailUserId(String tmailUserId) {
+        TMAIL_USER_ID = tmailUserId;
+    }
+
+    public static String getTmailDeviceId() {
+        return TMAIL_DEVICE_ID;
+    }
+
+    public static void setTmailDeviceId(String tmailDeviceId) {
+        TMAIL_DEVICE_ID = tmailDeviceId;
+    }
 }

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

@@ -19,6 +19,7 @@ public class EfunboxCallBack implements Callback {
         mCallBack = (Callback) callback;
     }
 
+
     @Override
     public void onSuccess(HttpInfo info) throws IOException {
         HttpResultBean<Object> bean = info.getRetDetail(new TypeToken<HttpResultBean<Object>>() {

+ 14 - 4
app/src/main/java/com/edufound/reader/util/EfunboxUtil.java

@@ -1,5 +1,6 @@
 package com.edufound.reader.util;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.text.TextUtils;
@@ -7,8 +8,10 @@ import android.util.DisplayMetrics;
 
 import com.edufound.reader.activity.LoginAlertActivity;
 import com.edufound.reader.activity.PayActivity;
+import com.edufound.reader.activity.TmailPayActivity;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.botsdk.BotRegisterListener;
+import com.edufound.reader.tmailsdk.TMailSDKUtil;
 
 import java.text.DecimalFormat;
 
@@ -137,7 +140,9 @@ public class EfunboxUtil {
         if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             return (Consts.getmConstsBaiDuUserBean().getUserInfo().getIsVip() == 1);
         } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
-            return (Consts.getmConstsUserBean().getUid().equals("1"));
+            return Consts.isIsYFVip();
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            return Consts.isIsYFVip();
         }
         return false;
     }
@@ -150,18 +155,23 @@ public class EfunboxUtil {
             //义方调用普通版登录
             Intent tologin = new Intent(context, LoginAlertActivity.class);
             context.startActivity(tologin);
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            TMailSDKUtil.TMailLogin(context);
         }
     }
 
 
-    public static void userPay(Context context) {
+    public static void userPay(Activity activity) {
         if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //百度渠道调用百度的支付
             BotRegisterListener.payBaiDuVip();
         } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
             //义方调用普通版支付
-            Intent topay = new Intent(context, PayActivity.class);
-            context.startActivity(topay);
+            Intent topay = new Intent(activity, PayActivity.class);
+            activity.startActivity(topay);
+        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            Intent topay = new Intent(activity, TmailPayActivity.class);
+            activity.startActivity(topay);
         }
     }
 

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

@@ -5,6 +5,8 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Environment;
 
+import androidx.annotation.Nullable;
+
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.receiver.ShowFollowReceiver;
 import com.edufound.reader.receiver.ShowPageLoadingReceiver;
@@ -62,8 +64,18 @@ public class OkHttpClient {
         OkHttpUtil.getDefault(activity).doGetAsync(info.addHead("uid", Consts.getUID()).build(), new EfunboxCallBack(callback));
     }
 
+    public static void doGetAsync(HttpInfo.Builder info, BaseCallback callback) {
+        if (!info.build().getUrl().contains("posts/list")
+                && !info.build().getUrl().contains("/userRead/check")
+                && !info.build().getUrl().contains("/order/info/")) {
+            Intent intent = new Intent(ShowPageLoadingReceiver.PAGE_LOADING_SHOW);
+            Consts.getmApplicAtion().getApplicationContext().sendBroadcast(intent);
+        }
+        OkHttpUtil.getDefault().doGetAsync(info.addHead("uid", Consts.getUID()).build(), new EfunboxCallBack(callback));
+    }
+
 
-    public static void doPostAsync(Activity activity, HttpInfo.Builder info, BaseCallback callback) {
+    public static void doPostAsync(@Nullable Activity activity, HttpInfo.Builder info, BaseCallback callback) {
         Intent intent = new Intent(ShowPageLoadingReceiver.PAGE_LOADING_SHOW);
         Consts.getmApplicAtion().getApplicationContext().sendBroadcast(intent);
         OkHttpUtil.getDefault(activity).doPostAsync(info.addHead("uid", Consts.getUID()).build(), new EfunboxCallBack(callback));

BIN
app/src/main/res/drawable/activity_pay_tmail_item_btn.png


BIN
app/src/main/res/drawable/activity_pay_tmail_item_recommend.png


BIN
app/src/main/res/drawable/activity_pay_tmail_item_year.png


BIN
app/src/main/res/drawable/activity_pay_tmal_item_month.png


BIN
app/src/main/res/drawable/icon.png


+ 83 - 0
app/src/main/res/layout/activity_pay_tmail.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <FrameLayout
+        android:id="@+id/background"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#70C1FF"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"></FrameLayout>
+
+
+    <FrameLayout
+        android:layout_width="1280dp"
+        android:layout_height="720dp"
+        android:gravity="center"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintDimensionRatio="h,16:9"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/activity_pay_back"
+            android:layout_width="77dp"
+            android:layout_height="77dp"
+            android:layout_marginLeft="32dp"
+            android:layout_marginTop="20dp"
+            android:src="@drawable/main_back"></ImageView>
+
+        <ImageView
+            android:id="@+id/activity_pay_tmail_tomyorder"
+            android:layout_width="130dp"
+            android:layout_height="130dp"
+            android:layout_gravity="right"
+            android:layout_marginTop="20dp"
+            android:layout_marginRight="32dp"
+            android:src="@drawable/activity_pay_myorder"></ImageView>
+
+
+        <FrameLayout
+            android:layout_width="1196dp"
+            android:layout_height="613dp"
+            android:layout_gravity="center|bottom"
+            android:layout_marginBottom="27dp"
+            android:background="@drawable/activity_pay_bg">
+
+            <LinearLayout
+                android:layout_width="1062dp"
+                android:layout_height="474dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="10dp"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:id="@+id/activity_pay_tmail_item_layouts"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center"
+                    android:layout_marginTop="30dp"
+                    android:layout_marginBottom="30dp"
+                    android:gravity="center"
+                    android:orientation="horizontal"
+                    android:paddingLeft="156dp"
+                    android:paddingRight="156dp">
+
+
+                </LinearLayout>
+
+            </LinearLayout>
+        </FrameLayout>
+
+    </FrameLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 104 - 0
app/src/main/res/layout/activity_pay_tmail_item.xml

@@ -0,0 +1,104 @@
+<?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">
+
+
+    <FrameLayout
+        android:id="@+id/activity_pay_tmail_item_bg"
+        android:layout_width="310dp"
+        android:layout_height="353dp"
+        android:layout_gravity="center"
+        android:background="@drawable/activity_pay_tmal_item_month">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <TextView
+                android:id="@+id/activity_pay_tmail_item_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="12个月"
+                android:textColor="#8A5215"
+                android:textSize="40dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.13"></TextView>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:orientation="horizontal"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.38">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_marginBottom="5dp"
+                    android:gravity="bottom"
+                    android:text="¥"
+                    android:textColor="#EB4E0D"
+                    android:textSize="46dp"></TextView>
+
+                <TextView
+                    android:id="@+id/activity_pay_tmail_item_money"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="60"
+                    android:textColor="#EB4E0D"
+                    android:textSize="72dp"></TextView>
+            </LinearLayout>
+
+            <TextView
+                android:id="@+id/activity_pay_tmail_item_originprice"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="原价¥129"
+                android:textColor="#999999"
+                android:textSize="18dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.6"></TextView>
+
+
+            <ImageView
+                android:id="@+id/activity_pay_tmail_item_btn"
+                android:layout_width="187dp"
+                android:layout_height="60dp"
+                android:src="@drawable/activity_pay_tmail_item_btn"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.9"></ImageView>
+
+            <ImageView
+                android:id="@+id/activity_pay_tmail_item_recommend"
+                android:layout_width="120dp"
+                android:layout_height="112dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginEnd="12dp"
+                android:src="@drawable/activity_pay_tmail_item_recommend"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="1"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_bias="0.0"></ImageView>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    </FrameLayout>
+</FrameLayout>

+ 2 - 2
build.gradle

@@ -20,8 +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/'}
+        maven { url 'https://dueros.baidu.com/maven/repository/maven-releases/' }
+        maven { url 'https://dueros.baidu.com/maven/repository/maven-snapshots/' }
     }
 }