Browse Source

1.增加华为支付界面
2.增加华为登录相关逻辑
3.华为支付自动续费提示等

FailedToRead 1 year ago
parent
commit
6fe51fa7fb
60 changed files with 1864 additions and 492 deletions
  1. 5 0
      .idea/jarRepositories.xml
  2. 28 2
      app/build.gradle
  3. 92 0
      app/src/channel_huawei_lianyun/agconnect-services.json
  4. 147 0
      app/src/exception/layout/activity_pay_huawei.xml
  5. 16 3
      app/src/main/AndroidManifest.xml
  6. 1 0
      app/src/main/java/com/edufound/reader/activity/OthersRecordActivity.java
  7. 2 12
      app/src/main/java/com/edufound/reader/activity/RecordActivity.java
  8. 30 24
      app/src/main/java/com/edufound/reader/activity/SplashActivity.java
  9. 21 14
      app/src/main/java/com/edufound/reader/activity/UserInfoSettingActivity.java
  10. 1 1
      app/src/main/java/com/edufound/reader/activity/EventPayActivity.java
  11. 51 54
      app/src/main/java/com/edufound/reader/activity/TmailPayActivity.java
  12. 1 1
      app/src/main/java/com/edufound/reader/activity/PayActivity.java
  13. 1 1
      app/src/main/java/com/edufound/reader/activity/TmailPayActivity.java
  14. 1 5
      app/src/main/java/com/edufound/reader/adapter/SlideVideoAdapter.java
  15. 2 4
      app/src/main/java/com/edufound/reader/apiserver/ActivityEventServerImpl.java
  16. 3 5
      app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java
  17. 17 5
      app/src/main/java/com/edufound/reader/application/EApplication.java
  18. 110 10
      app/src/main/java/com/edufound/reader/base/BaseActivity.java
  19. 5 5
      app/src/main/java/com/edufound/reader/base/BaseFragment.java
  20. 8 0
      app/src/main/java/com/edufound/reader/bean/ChannelCodeEnum.java
  21. 1 2
      app/src/main/java/com/edufound/reader/bean/UserEventBean.java
  22. 2 6
      app/src/main/java/com/edufound/reader/botsdk/BotRegisterListener.java
  23. 40 0
      app/src/main/java/com/edufound/reader/contract/HuaWeiPayContract.java
  24. 2 0
      app/src/main/java/com/edufound/reader/contract/RecommendFragmentContract.java
  25. 8 0
      app/src/main/java/com/edufound/reader/contract/SplashContract.java
  26. 13 2
      app/src/main/java/com/edufound/reader/cusview/RvListJzvdStd.java
  27. 40 6
      app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java
  28. 2 1
      app/src/main/java/com/edufound/reader/interfaces/EfunboxInterfaces.java
  29. 5 12
      app/src/main/java/com/edufound/reader/jsinterfaces/WebActivityJsInterfaces.java
  30. 0 74
      app/src/main/java/com/edufound/reader/miutil/MiSoundSDKUtil.java
  31. 26 0
      app/src/main/java/com/edufound/reader/model/HuaWeiPayModel.java
  32. 1 1
      app/src/main/java/com/edufound/reader/model/PayModel.java
  33. 4 7
      app/src/main/java/com/edufound/reader/popwindow/PopWindowUtil.java
  34. 55 49
      app/src/main/java/com/edufound/reader/presenter/CharacterFragmentPresenterVersionThree.java
  35. 5 9
      app/src/main/java/com/edufound/reader/presenter/EventPayPresenter.java
  36. 581 0
      app/src/main/java/com/edufound/reader/presenter/HuaWeiPayPresenter.java
  37. 5 5
      app/src/main/java/com/edufound/reader/presenter/LoginAlertPresenter.java
  38. 15 19
      app/src/main/java/com/edufound/reader/presenter/MainPresenter.java
  39. 9 21
      app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java
  40. 11 2
      app/src/main/java/com/edufound/reader/presenter/OthersRecordPresenter.java
  41. 3 3
      app/src/main/java/com/edufound/reader/presenter/PayPresenter.java
  42. 7 7
      app/src/main/java/com/edufound/reader/presenter/PopWindowPresneter.java
  43. 84 19
      app/src/main/java/com/edufound/reader/presenter/RecommendFragmentPresenter.java
  44. 6 2
      app/src/main/java/com/edufound/reader/presenter/RecordPresenter.java
  45. 128 15
      app/src/main/java/com/edufound/reader/presenter/SplashPresenter.java
  46. 6 13
      app/src/main/java/com/edufound/reader/presenter/TmailPayPresenter.java
  47. 1 2
      app/src/main/java/com/edufound/reader/presenter/UserInfoSettingPresenter.java
  48. 1 1
      app/src/main/java/com/edufound/reader/presenter/WebPresenter.java
  49. 13 4
      app/src/main/java/com/edufound/reader/util/Consts.java
  50. 58 34
      app/src/main/java/com/edufound/reader/util/EfunboxUtil.java
  51. 6 2
      app/src/main/java/com/edufound/reader/util/GlideUtils.java
  52. 1 1
      app/src/main/java/com/edufound/reader/util/OkHttpClient.java
  53. 114 0
      app/src/main/java/com/edufound/reader/util/huaweiutil/HuaWeiUtil.java
  54. 36 0
      app/src/main/java/com/edufound/reader/util/miutil/MiSoundSDKUtil.java
  55. 1 1
      app/src/main/java/com/edufound/reader/tmailsdk/TMailConstants.java
  56. 1 5
      app/src/main/java/com/edufound/reader/tmailsdk/TMailSDKUtil.java
  57. BIN
      app/src/main/res/drawable/huawei_pay_bg.png
  58. 27 20
      app/src/main/res/layout/toast.xml
  59. 3 0
      build.gradle
  60. 1 1
      gradle.properties

+ 5 - 0
.idea/jarRepositories.xml

@@ -61,5 +61,10 @@
       <option name="name" value="maven5" />
       <option name="url" value="https://mvnrepo.alibaba-inc.com/mvn/repository" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven5" />
+      <option name="name" value="maven5" />
+      <option name="url" value="https://developer.huawei.com/repo/" />
+    </remote-repository>
   </component>
 </project>

+ 28 - 2
app/build.gradle

@@ -16,6 +16,7 @@ android {
         versionCode 32
         versionName "3.2"
         flavorDimensions "versionCode"
+        resConfigs "en", "zh-rCN"
         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "2006"]//添加一个默认渠道号
         ndk {
 
@@ -71,6 +72,8 @@ android {
                             newoutputFile = "\\华为pad联运\\"
                         } else if (channel == ("3009")) {
                             newoutputFile = "\\步步高\\"
+                        } else if (channel == ("3010")) {
+                            newoutputFile = "\\讯飞pad\\"
                         }
                         output.outputFileName = new File(newoutputFile, fileName)
                     }
@@ -104,7 +107,7 @@ android {
                     'src/fragmentUser',//首页我的
                     'src/activityLoginAlert',//登录弹窗
                     'src/exception',//异常弹窗
-                    'src/testimg'//测试图片
+                    'src/testimg',//测试图片
             ]
         }
     }
@@ -162,7 +165,8 @@ android {
         }
 
         //华为Pad联运
-        channel_huawei {
+        channel_huawei_lianyun {
+            apply plugin: "com.huawei.agconnect"
             applicationIdSuffix ".huawei"
             signingConfig signingConfigs.efunboxKey
             manifestPlaceholders = [
@@ -178,6 +182,15 @@ android {
                     appIcon: "@drawable/icon",
             ]
         }
+
+        //讯飞pad
+        channel_xunfei {
+            signingConfig signingConfigs.efunboxKey
+            manifestPlaceholders = [
+                    appCode: "3010",
+                    appIcon: "@drawable/icon",
+            ]
+        }
     }
     productFlavors.all {
         flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: manifestPlaceholders.appCode, icon: manifestPlaceholders.appIcon]
@@ -275,4 +288,17 @@ dependencies {
 
     //SimpleRatingBar(https://github.com/williamyyu/SimpleRatingBar)
     implementation 'com.github.ome450901:SimpleRatingBar:1.4.0'
+
+
+    //华为sdk
+    implementation 'com.huawei.hms:hwid:6.7.0.300'
+    implementation 'com.huawei.hms:hmscoreinstaller:6.6.0.300'
+    implementation 'com.huawei.hms:iap:6.4.0.301'
+    implementation 'com.huawei.hms:appservice:6.8.0.300'
+    implementation 'com.huawei.hms:hianalytics:6.9.0.301'
+
+
 }
+agcp {
+    manifest false
+}

+ 92 - 0
app/src/channel_huawei_lianyun/agconnect-services.json

@@ -0,0 +1,92 @@
+{
+	"agcgw":{
+		"backurl":"connect-drcn.hispace.hicloud.com",
+		"url":"connect-drcn.dbankcloud.cn",
+		"websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com",
+		"websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn"
+	},
+	"agcgw_all":{
+		"CN":"connect-drcn.dbankcloud.cn",
+		"CN_back":"connect-drcn.hispace.hicloud.com",
+		"DE":"connect-dre.dbankcloud.cn",
+		"DE_back":"connect-dre.hispace.hicloud.com",
+		"RU":"connect-drru.hispace.dbankcloud.ru",
+		"RU_back":"connect-drru.hispace.dbankcloud.cn",
+		"SG":"connect-dra.dbankcloud.cn",
+		"SG_back":"connect-dra.hispace.hicloud.com"
+	},
+	"websocketgw_all":{
+		"CN":"connect-ws-drcn.hispace.dbankcloud.cn",
+		"CN_back":"connect-ws-drcn.hispace.dbankcloud.com",
+		"DE":"connect-ws-dre.hispace.dbankcloud.cn",
+		"DE_back":"connect-ws-dre.hispace.dbankcloud.com",
+		"RU":"connect-ws-drru.hispace.dbankcloud.ru",
+		"RU_back":"connect-ws-drru.hispace.dbankcloud.cn",
+		"SG":"connect-ws-dra.hispace.dbankcloud.cn",
+		"SG_back":"connect-ws-dra.hispace.dbankcloud.com"
+	},
+	"client":{
+		"cp_id":"890086000102026936",
+		"product_id":"99536292102833315",
+		"client_id":"1044724517571678016",
+		"client_secret":"C4F4C80346436F713724CB5F493A10EFF5A943979B337CAF088831A818630133",
+		"project_id":"99536292102833315",
+		"app_id":"107463381",
+		"api_key":"DAEDAMr1x6ZIZWHRaL6fgnrefbDmSpyjgnYQG5Eepwxz0B2i4iA0OFklUzZQVC19ErrBqhLnMLEM3jcyEtc40ZkxkqG9LmidN230jg==",
+		"package_name":"com.edufound.reader.huawei"
+	},
+	"oauth_client":{
+		"client_id":"107463381",
+		"client_type":1
+	},
+	"app_info":{
+		"app_id":"107463381",
+		"package_name":"com.edufound.reader.huawei"
+	},
+	"service":{
+		"analytics":{
+			"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
+			"collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com",
+			"collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
+			"collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
+			"collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
+			"resource_id":"p1",
+			"channel_id":""
+		},
+		"search":{
+			"url":"https://search-drcn.cloud.huawei.com"
+		},
+		"cloudstorage":{
+			"storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia",
+			"storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru",
+			"storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru",
+			"storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu",
+			"storage_url_de":"https://ops-dre.agcstorage.link",
+			"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn",
+			"storage_url_sg":"https://ops-dra.agcstorage.link",
+			"storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn",
+			"storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn"
+		},
+		"ml":{
+			"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"
+		}
+	},
+	"region":"CN",
+	"configuration_version":"3.0",
+	"appInfos":[
+		{
+			"package_name":"com.edufound.reader.huawei",
+			"client":{
+				"app_id":"107463381"
+			},
+			"app_info":{
+				"package_name":"com.edufound.reader.huawei",
+				"app_id":"107463381"
+			},
+			"oauth_client":{
+				"client_type":1,
+				"client_id":"107463381"
+			}
+		}
+	]
+}

+ 147 - 0
app/src/exception/layout/activity_pay_huawei.xml

@@ -0,0 +1,147 @@
+<?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:id="@+id/frameLayout3"
+        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_huawei_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_huawei_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:id="@+id/activity_huawei_pay_bg"
+            android:layout_width="1102dp"
+            android:layout_height="580dp"
+            android:layout_gravity="center"
+            android:layout_marginBottom="27dp"
+            android:background="@drawable/huawei_pay_bg">
+
+            <LinearLayout
+                android:layout_width="1062dp"
+                android:layout_height="474dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="10dp"
+                android:orientation="vertical">
+
+                <LinearLayout
+                    android:id="@+id/activity_pay_huawei_item_layouts"
+                    android:layout_width="match_parent"
+                    android:layout_height="474dp"
+                    android:layout_gravity="center"
+                    android:layout_marginTop="30dp"
+                    android:gravity="top"
+                    android:orientation="horizontal"
+                    android:paddingLeft="156dp"
+                    android:paddingRight="156dp">
+
+
+                </LinearLayout>
+
+            </LinearLayout>
+        </FrameLayout>
+
+
+        <FrameLayout
+            android:id="@+id/activity_pay_qrcode_layout"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@color/translucent_background"
+            android:visibility="gone">
+
+
+            <ImageView
+                android:id="@+id/activity_pay_qrcode"
+                android:layout_width="300dp"
+                android:layout_height="300dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="30dp"
+                android:background="@color/red"></ImageView>
+
+            <ImageView
+                android:id="@+id/activity_pay_qrcode_layout_close"
+                android:layout_width="50dp"
+                android:layout_height="50dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="250dp"
+                android:src="@drawable/close_icon"></ImageView>
+
+        </FrameLayout>
+
+
+        <LinearLayout
+            android:id="@+id/activity_pay_huawei_automatic_layout"
+            android:layout_width="match_parent"
+            android:layout_height="100dp"
+            android:layout_gravity="bottom"
+            android:layout_marginBottom="15dp"
+            android:gravity="center"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/activity_pay_huawei_automatic"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_gravity="top"
+                android:gravity="center"
+                android:text="《自动续费服务条款》"
+                android:textColor="#333333"
+                android:textSize="20dp"></TextView>
+
+            <TextView
+                android:id="@+id/activity_pay_huawei_automatic_desc"
+                android:layout_width="800dp"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:layout_marginTop="10dp"
+                android:gravity="center|left"
+                android:text="次月起10元/月,自动续费可随时取消。确认购买后,将向您账户收款,购买连续包月项目,将自动续订。"
+                android:textColor="#333333"
+                android:textSize="14dp"></TextView>
+
+
+        </LinearLayout>
+
+
+    </FrameLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 16 - 3
app/src/main/AndroidManifest.xml

@@ -26,6 +26,7 @@
         android:hardwareAccelerated="true"
         android:icon="${icon}"
         android:label="@string/app_name"
+        android:largeHeap="true"
         android:roundIcon="${icon}"
         android:supportsRtl="true"
         android:usesCleartextTraffic="true">
@@ -174,7 +175,7 @@
             android:windowSoftInputMode="adjustNothing|stateHidden" />
         <!-- 支付界面 -->
         <activity
-            android:name=".activity.PayActivity"
+            android:name=".activity.payactivity.PayActivity"
             android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
             android:launchMode="singleTask"
             android:maxAspectRatio="2.1"
@@ -185,7 +186,7 @@
 
         <!-- 活动支付界面-->
         <activity
-            android:name=".activity.EventPayActivity"
+            android:name=".activity.payactivity.EventPayActivity"
             android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
             android:launchMode="singleTask"
             android:maxAspectRatio="2.1"
@@ -195,7 +196,19 @@
             android:windowSoftInputMode="adjustNothing|stateHidden" />
 
         <activity
-            android:name=".activity.TmailPayActivity"
+            android:name=".activity.payactivity.TmailPayActivity"
+            android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
+            android:launchMode="singleTask"
+            android:maxAspectRatio="2.1"
+            android:resizeableActivity="false"
+            android:screenOrientation="landscape"
+            android:theme="@style/efunboxTransparentLoginAlert"
+            android:windowSoftInputMode="adjustNothing|stateHidden" />
+
+
+        <!--华为支付界面 -->
+        <activity
+            android:name=".activity.payactivity.HuaWeiPayActivity"
             android:configChanges="screenLayout|screenSize|keyboardHidden|keyboard|orientation"
             android:launchMode="singleTask"
             android:maxAspectRatio="2.1"

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

@@ -228,6 +228,7 @@ public class OthersRecordActivity extends BaseMvpActivity<OthersRecordPresenter>
         } else {
             mUserName.setText(info.getUser().getNickName());
         }
+        Logger.e("mUserName:" + mUserName.getText().toString());
         doFollowSuccess(info.getLike());
         if (info.getUser().getUid().equals(Consts.getUID()) || info.getUser().getProfession().equals("官方")) {
             //是自己

+ 2 - 12
app/src/main/java/com/edufound/reader/activity/RecordActivity.java

@@ -1,7 +1,6 @@
 package com.edufound.reader.activity;
 
 import android.Manifest;
-import android.animation.Animator;
 import android.app.Activity;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -9,7 +8,6 @@ import android.graphics.drawable.AnimationDrawable;
 import android.net.Uri;
 import android.os.Build;
 import android.provider.Settings;
-import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
@@ -18,18 +16,14 @@ import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.baidu.duer.bot.directive.payload.AmountInfo;
-import com.baidu.duer.botsdk.BotIntent;
 import com.edufound.reader.R;
+import com.edufound.reader.activity.payactivity.EventPayActivity;
 import com.edufound.reader.annotation.BindView;
-import com.edufound.reader.apiserver.UserApiServerImpl;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.ThroughType;
-import com.edufound.reader.botsdk.BotRegisterListener;
 import com.edufound.reader.contract.RecordContract;
-import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.cusview.RvListJzvdStd;
 import com.edufound.reader.presenter.RecordPresenter;
 import com.edufound.reader.util.Consts;
@@ -39,11 +33,7 @@ import com.edufound.reader.util.PermissionsUtil;
 import com.edufound.reader.util.ThroughUtil;
 import com.orhanobut.logger.Logger;
 
-import java.util.HashMap;
-
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.app.ActivityCompat;
 
 public class RecordActivity extends BaseMvpActivity<RecordPresenter> implements RecordContract.View {
 
@@ -110,7 +100,7 @@ public class RecordActivity extends BaseMvpActivity<RecordPresenter> implements
                     //一次都没有出来过
                     PermissionsUtil.verifyAudioPermissions(this);
                 } else if (isgranted.equals("-1")) {
-                    if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+                    if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
                         PermissionsUtil.verifyAudioPermissions(this);
                     } else {
                         Uri packageURI = Uri.parse("package:" + mActivity.getPackageName());

+ 30 - 24
app/src/main/java/com/edufound/reader/activity/SplashActivity.java

@@ -1,27 +1,22 @@
 package com.edufound.reader.activity;
 
 import android.app.Activity;
-import android.graphics.drawable.BitmapDrawable;
-import android.os.Message;
-import android.view.MotionEvent;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
 import androidx.constraintlayout.widget.ConstraintLayout;
 
 import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseMvpActivity;
+import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.contract.SplashContract;
 import com.edufound.reader.presenter.SplashPresenter;
+import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.MMKVUtil;
-import com.orhanobut.logger.Logger;
-import com.willy.ratingbar.RotationRatingBar;
-
-import java.util.logging.Handler;
+import com.umeng.commonsdk.UMConfigure;
 
 public class SplashActivity extends BaseMvpActivity<SplashPresenter> implements SplashContract.View {
     Activity mActivity;
@@ -46,28 +41,17 @@ public class SplashActivity extends BaseMvpActivity<SplashPresenter> implements
         mActivity = this;
         mPresenter = new SplashPresenter();
         mPresenter.attachView(this);
-        mPresenter.initServiceText(mServText);
-
 
-        if (MMKVUtil.getInstance().decodeBoolean("agreement")) {
-            //这里同意过了,可以直接跳转了
-            mPresenter.getUserInfo(getIntent());
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+            //华为联运初始化
+            mPresenter.initHuaWei();
         } else {
-            //没有同意过,展示UI
-            mAgreementLayout.setVisibility(View.VISIBLE);
-            addUiClickListener(mAgreementOk, o -> {
-                MMKVUtil.getInstance().encode("agreement", true);
-                mPresenter.getUserInfo(getIntent());
-            });
-            addUiClickListener(mAgreementCancel, o -> {
-                EApplication.killAppProcess(getActivity());
-                System.exit(1);
-            });
+            toMainActivity();
         }
 
-
     }
 
+
     @Override
     public void onGetDisconnect() {
 
@@ -108,4 +92,26 @@ public class SplashActivity extends BaseMvpActivity<SplashPresenter> implements
         super.onDestroy();
         mPresenter.detachView();
     }
+
+    @Override
+    public void toMainActivity() {
+        mPresenter.initServiceText(mServText);
+        if (MMKVUtil.getInstance().decodeBoolean("agreement")) {
+            //这里同意过了,可以直接跳转了,并且开启友盟统计
+
+            mPresenter.getUserInfo(getIntent());
+        } else {
+            //没有同意过,展示UI
+            mAgreementLayout.setVisibility(View.VISIBLE);
+            addUiClickListener(mAgreementOk, o -> {
+                MMKVUtil.getInstance().encode("agreement", true);
+                //用户点击同意了,开开启友盟统计
+                mPresenter.getUserInfo(getIntent());
+            });
+            addUiClickListener(mAgreementCancel, o -> {
+                EApplication.killAppProcess(getActivity());
+                System.exit(1);
+            });
+        }
+    }
 }

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

@@ -29,7 +29,8 @@ import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.UserInfoSettingContract;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.listener.PopUtilClickListener;
-import com.edufound.reader.miutil.MiSoundSDKUtil;
+import com.edufound.reader.util.huaweiutil.HuaWeiUtil;
+import com.edufound.reader.util.miutil.MiSoundSDKUtil;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.presenter.PopWindowPresneter;
 import com.edufound.reader.presenter.UserInfoSettingPresenter;
@@ -158,21 +159,21 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             getActivity().startActivity(intent);
         });
 
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //百度渠道,隐藏注销和退出登录按钮
             mCancellationLayout.setVisibility(View.GONE);
             mLoginOut.setVisibility(View.GONE);
             mBindPhoneNumLayout.setVisibility(View.GONE);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
             //义方渠道
             mCancellationLayout.setVisibility(View.VISIBLE);
             mLoginOut.setVisibility(View.VISIBLE);
             mBindPhoneNumLayout.setVisibility(View.GONE);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             mSwitchLayout.setVisibility(View.GONE);
             mBindWeChat.setVisibility(View.GONE);
             mBindPhoneNumLayout.setVisibility(View.GONE);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
             mBindWeChat.setVisibility(View.GONE);
             mSwitchLayout.setVisibility(View.GONE);
             mBindPhoneNumLayout.setVisibility(View.VISIBLE);
@@ -194,15 +195,17 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
                     });
                 }
             });
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
             mBindPhoneNumLayout.setVisibility(View.GONE);
 
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
-
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+            mBindWeChat.setVisibility(View.GONE);
+            mBindPhoneNumLayout.setVisibility(View.GONE);
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.XUNFEI.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
             mBindPhoneNumLayout.setVisibility(View.GONE);
             mBindWeChat.setVisibility(View.GONE);
         }
@@ -223,6 +226,10 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
                 public void clickSubmit(Object obj) {
                     CusToast.getInstance(mActivity).show("退出账号", 2000);
                     mPresenter.loginOut();
+                    if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+                        //华为联运还要退出华为账号
+                        HuaWeiUtil.signOut();
+                    }
                 }
             });
         });
@@ -261,7 +268,7 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
                 mNickName.clearFocus();
                 return;
             }
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+            if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
                 //小米的特殊处理
 
                 PopWindowUtil.miSoundLoginWindow(mActivity, getRootView(), MiSoundSDKUtil.MI_SOUND_QRCODE_UPDATE_USER, new PopWindowPresneter.MISoundLoginCallBack() {
@@ -373,7 +380,7 @@ public class UserInfoSettingActivity extends BaseMvpActivity<UserInfoSettingPres
             }
         });
 
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU)) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU)) {
             if (Consts.getmConstsBaiDuUserBean() != null) {
                 mUserNum.setText("账号:" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
             }

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

@@ -1,4 +1,4 @@
-package com.edufound.reader.activity;
+package com.edufound.reader.activity.payactivity;
 
 import android.app.Activity;
 import android.content.Intent;

+ 51 - 54
app/src/main/java/com/edufound/reader/activity/TmailPayActivity.java

@@ -1,13 +1,13 @@
-package com.edufound.reader.activity;
+package com.edufound.reader.activity.payactivity;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.graphics.Color;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.Toast;
+import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 
@@ -15,62 +15,84 @@ import com.edufound.reader.R;
 import com.edufound.reader.annotation.BindView;
 import com.edufound.reader.base.BaseMvpActivity;
 import com.edufound.reader.botsdk.BotRegisterListener;
-import com.edufound.reader.contract.TmailPayContract;
+import com.edufound.reader.contract.HuaWeiPayContract;
+import com.edufound.reader.contract.PayContract;
 import com.edufound.reader.popwindow.PopWindowUtil;
+import com.edufound.reader.presenter.HuaWeiPayPresenter;
+import com.edufound.reader.presenter.PayPresenter;
 import com.edufound.reader.presenter.TmailPayPresenter;
-import com.edufound.reader.util.QRCodeUtil;
 import com.edufound.reader.util.SizeUtils;
 
 import io.reactivex.rxjava3.functions.Consumer;
 
-/**
- * 天猫/小米-支付的页面
- */
-public class TmailPayActivity extends BaseMvpActivity<TmailPayPresenter> implements TmailPayContract.View {
+public class HuaWeiPayActivity extends BaseMvpActivity<HuaWeiPayPresenter> implements HuaWeiPayContract.View {
+
 
     Activity mActivity;
 
-    @BindView(id = R.id.activity_pay_tmail_tomyorder)
+
+    @BindView(id = R.id.activity_huawei_pay_bg)
+    FrameLayout mBgFrame;
+
+    @BindView(id = R.id.activity_pay_huawei_tomyorder)
     ImageView mToMyOrder;
 
-    @BindView(id = R.id.activity_pay_back)
+    @BindView(id = R.id.activity_huawei_pay_back)
     ImageView mImgBack;
-    @BindView(id = R.id.activity_pay_tmail_item_layouts)
-    LinearLayout mItemFrame;
-
 
-    @BindView(id = R.id.activity_pay_qrcode_layout)
-    FrameLayout mQRCodeLayout;
+    @BindView(id = R.id.activity_pay_huawei_item_layouts)
+    LinearLayout mItemFrame;
 
+    @BindView(id = R.id.activity_pay_huawei_automatic)
+    TextView mAutomatic;
 
-    @BindView(id = R.id.activity_pay_qrcode)
-    ImageView mQRCodeImg;
+    @BindView(id = R.id.activity_pay_huawei_automatic_desc)
+    TextView mAutomaticDesc;
 
-    @BindView(id = R.id.activity_pay_qrcode_layout_close)
-    ImageView mQRCodeLayoutClose;
 
     @Override
     public int getLayoutId() {
-        return R.layout.activity_pay_tmail;
+        return R.layout.activity_pay_huawei;
     }
 
+
     @Override
     public void initView() {
         mActivity = this;
-        mPresenter = new TmailPayPresenter();
+        mPresenter = new HuaWeiPayPresenter();
         mPresenter.attachView(this);
+        mBgFrame.setBackgroundResource(R.drawable.huawei_pay_bg);
 
-        if (getIntent().getBooleanExtra("isBDVip", false)) {
-            BotRegisterListener.payBaiDuVip();
-            return;
-        }
-        addUiClickListener(mImgBack, o -> {
+        addUiClick(mImgBack, o -> {
             mActivity.finish();
         });
-        addUiClickListener(mToMyOrder, o -> {
+        addUiClick(mToMyOrder, o -> {
             PopWindowUtil.showMyOrderWindow(mActivity, getRootView());
         });
+        addUiClick(mAutomatic, o -> {
+            PopWindowUtil.showLongSizeImg(mActivity, "https://reader-wx.ai160.com/images/reader/activity/zidongxufei.jpg", getRootView());
+        });
+        addUiClick(mAutomaticDesc, o -> {
+            PopWindowUtil.showLongSizeImg(mActivity, "https://reader-wx.ai160.com/images/reader/activity/zidongxufei.jpg", getRootView());
+        });
+
+
+        int paddingnum = 20;
+        mItemFrame.setPadding(SizeUtils.dp2px(mActivity, paddingnum), 0, SizeUtils.dp2px(mActivity, paddingnum), 0);
         mPresenter.getProductInfo();
+        getRootView().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.checkOrder(0);
+            }
+        }, 100);
+        getRootView().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.checkOrder(1);
+            }
+        }, 100);
+        mToMyOrder.bringToFront();
     }
 
     @Override
@@ -109,11 +131,6 @@ public class TmailPayActivity extends BaseMvpActivity<TmailPayPresenter> impleme
     }
 
     @Override
-    public ViewGroup getRootView() {
-        return findViewById(android.R.id.content);
-    }
-
-    @Override
     public void getProductSuccess() {
         mPresenter.initPayItem(mItemFrame);
     }
@@ -124,28 +141,8 @@ public class TmailPayActivity extends BaseMvpActivity<TmailPayPresenter> impleme
     }
 
     @Override
-    public void isPaySuccess() {
-        Toast.makeText(getActivity(), "支付成功", Toast.LENGTH_SHORT).show();
-    }
-
-    @Override
-    public void MiSoundPayUrlSuccess(String url) {
-        mQRCodeLayout.post(new Runnable() {
-            @Override
-            public void run() {
-                mQRCodeLayout.setVisibility(View.VISIBLE);
-                mQRCodeImg.setImageBitmap(QRCodeUtil.createQRCode(url, SizeUtils.dp2px(getActivity(), 300)));
-                addUiClickListener(mQRCodeLayoutClose, o -> {
-                    mQRCodeLayout.setVisibility(View.GONE);
-                });
-            }
-        });
-
-    }
-
-    @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        mPresenter.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
+        mPresenter.onActivityResult(requestCode, resultCode, data);
     }
 }

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

@@ -1,4 +1,4 @@
-package com.edufound.reader.activity;
+package com.edufound.reader.activity.payactivity;
 
 import android.app.Activity;
 import android.view.KeyEvent;

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

@@ -1,4 +1,4 @@
-package com.edufound.reader.activity;
+package com.edufound.reader.activity.payactivity;
 
 import android.app.Activity;
 import android.content.Intent;

+ 1 - 5
app/src/main/java/com/edufound/reader/adapter/SlideVideoAdapter.java

@@ -3,7 +3,6 @@ package com.edufound.reader.adapter;
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Intent;
-import android.graphics.Color;
 import android.graphics.Rect;
 import android.os.Build;
 import android.os.Message;
@@ -25,7 +24,6 @@ import com.edufound.reader.bean.CommentListBean;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.HttpResultDataListBean;
 import com.edufound.reader.bean.UserRecordBean;
-import com.edufound.reader.cusview.AutoPollRecyclerView;
 import com.edufound.reader.cusview.RvListJzvdStd;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.EfunboxUtil;
@@ -40,11 +38,9 @@ import com.orhanobut.logger.Logger;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.logging.Handler;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
-import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import cn.jzvd.JZDataSource;
@@ -82,7 +78,7 @@ public class SlideVideoAdapter extends RecyclerView.Adapter<VideoHolder> {
     public void onBindViewHolder(@NonNull VideoHolder holder, @SuppressLint("RecyclerView") int position) {
 //        holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN);
         holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class, mListData.get(position).getUserRead().getId());
-        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             GlideUtils.loadImageSizeKipMemoryCache(mContext, mListData.get(position).getUserRead().getCoverImg(), holder.mVideo.posterImageView);
         }
 

+ 2 - 4
app/src/main/java/com/edufound/reader/apiserver/ActivityEventServerImpl.java

@@ -1,7 +1,5 @@
 package com.edufound.reader.apiserver;
 
-import android.app.Activity;
-
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.OkHttpClient;
 import com.okhttplib.HttpInfo;
@@ -24,12 +22,12 @@ public class ActivityEventServerImpl implements ActivityEventServer {
 
     @Override
     public void getEventListByType(Callback callback) {
-        OkHttpClient.doGetAsync(new HttpInfo.Builder().setUrl(API + "/activity/list").addParam("channelCode", Consts.getUmengChannel()).addParam("uid", Consts.getUID()), callback);
+        OkHttpClient.doGetAsync(new HttpInfo.Builder().setUrl(API + "/activity/list").addParam("channelCode", Consts.getUMengChannel()).addParam("uid", Consts.getUID()), callback);
     }
 
     @Override
     public void getExcellentList(Callback callback) {
-        OkHttpClient.doGetAsync(new HttpInfo.Builder().setUrl(API + "/excellent").addParam("channelCode", Consts.getUmengChannel()).addParam("uid", Consts.getUID()), callback);
+        OkHttpClient.doGetAsync(new HttpInfo.Builder().setUrl(API + "/excellent").addParam("channelCode", Consts.getUMengChannel()).addParam("uid", Consts.getUID()), callback);
     }
 }
 

+ 3 - 5
app/src/main/java/com/edufound/reader/apiserver/UserApiServerImpl.java

@@ -1,7 +1,6 @@
 package com.edufound.reader.apiserver;
 
 import android.app.Activity;
-import android.telecom.Call;
 
 import com.edufound.reader.bean.UserEventBean;
 import com.edufound.reader.botsdk.BotConstants;
@@ -9,7 +8,6 @@ import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.EfunboxCallBack;
 import com.edufound.reader.util.OkHttpClient;
-import com.google.gson.Gson;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
 import com.orhanobut.logger.Logger;
@@ -150,7 +148,7 @@ public class UserApiServerImpl implements userApiServer {
     @Override
     public void getLoginQRCode(Callback callback) {
         Logger.e("deviceCode:" + DeviceUuidFactory.getUuid());
-        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUmengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).setUrl(API + "/user/qrCode"), callback);
+        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUMengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).setUrl(API + "/user/qrCode"), callback);
     }
 
     @Override
@@ -164,12 +162,12 @@ public class UserApiServerImpl implements userApiServer {
      */
     @Override
     public void getRankList(String id, Callback callback) {
-        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUmengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).addParam("activityRaceReadId", id).setUrl(API + "/activity/rank"), callback);
+        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUMengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).addParam("activityRaceReadId", id).setUrl(API + "/activity/rank"), callback);
     }
 
     @Override
     public void postFirstEnter(Callback callback) {
-        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUmengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).setUrl(API + "/userEvent/enter"), callback);
+        OkHttpClient.doGetAsync(HttpInfo.Builder().addParam("channelCode", Consts.getUMengChannel()).addParam("deviceCode", DeviceUuidFactory.getUuid()).setUrl(API + "/userEvent/enter"), callback);
     }
 }
 

+ 17 - 5
app/src/main/java/com/edufound/reader/application/EApplication.java

@@ -29,6 +29,7 @@ import com.edufound.reader.util.Cockroach;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.ExceptionHandler;
+import com.edufound.reader.util.GlideUtils;
 import com.edufound.reader.util.OkHttpClient;
 import com.orhanobut.logger.AndroidLogAdapter;
 import com.orhanobut.logger.FormatStrategy;
@@ -39,7 +40,6 @@ import com.umeng.analytics.MobclickAgent;
 import com.umeng.commonsdk.UMConfigure;
 import com.umeng.commonsdk.listener.OnGetOaidListener;
 
-import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlPullParserFactory;
 
 import java.util.ArrayList;
@@ -70,6 +70,16 @@ public class EApplication extends Application {
             //初始化OKhttp3
             OkHttpClient.initOkHttpUtil(getApplicationContext());
 
+//
+            new Thread() {
+                @Override
+                public void run() {
+                    super.run();
+                    //清除所有图片缓存
+                    GlideUtils.removeAll(getApplicationContext());
+                }
+            }.start();
+
             //初始化logger
             FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
                     .showThreadInfo(false)  // 是否显示线程信息,默认为ture
@@ -82,7 +92,6 @@ public class EApplication extends Application {
             //初始化友盟
             UMConfigure.setLogEnabled(true);
             UMConfigure.preInit(this, getUmengAppKey(), getUmengChannel());
-            UMConfigure.init(this, getUmengAppKey(), getUmengChannel(), UMConfigure.DEVICE_TYPE_PHONE, "");
             UMConfigure.getOaid(this, new OnGetOaidListener() {
                 @Override
                 public void onGetOaid(String s) {
@@ -101,7 +110,7 @@ public class EApplication extends Application {
             Consts.setUID("test");
             //初始化activity监听
             registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
                 /** 接入益智乐园的App,需要删掉下面这一行。保证益智乐园的付费等逻辑正常执行,不知道益智乐园是啥的,不要删掉这一行 */
                 HeartBeatReporter.getInstance().setShouldUploadHeartBeatByApp(false);
                 // 初始化BotSDK
@@ -115,7 +124,7 @@ public class EApplication extends Application {
                         random1, BotSDKUtils.sign(random1), random2, BotSDKUtils.sign(random2));
 
             }
-        } catch (XmlPullParserException e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
 
@@ -262,7 +271,7 @@ public class EApplication extends Application {
                 if (applicationInfo != null) {
                     if (applicationInfo.metaData != null) {
                         channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
-                        Consts.setUmengChannel(channelName);
+                        Consts.setUMengChannel(channelName);
                     }
                 }
             }
@@ -284,6 +293,7 @@ public class EApplication extends Application {
                 if (applicationInfo != null) {
                     if (applicationInfo.metaData != null) {
                         appkey = String.valueOf(applicationInfo.metaData.get("UMENG_APPKEY"));
+                        Consts.setUMengAppKey(appkey);
                     }
                 }
             }
@@ -305,4 +315,6 @@ public class EApplication extends Application {
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Consts.getmApplicAtion().startActivity(intent);
     }
+
+
 }

+ 110 - 10
app/src/main/java/com/edufound/reader/base/BaseActivity.java

@@ -56,7 +56,8 @@ import com.edufound.reader.receiver.NetworkChangeReceiver;
 import com.edufound.reader.receiver.ScreenListener;
 import com.edufound.reader.receiver.ShowFollowReceiver;
 import com.edufound.reader.receiver.ShowPageLoadingReceiver;
-import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.huaweiutil.HuaWeiUtil;
+import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.EfunboxUtil;
@@ -66,6 +67,10 @@ import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.SizeUtils;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
+import com.huawei.hmf.tasks.Task;
+import com.huawei.hms.common.ApiException;
+import com.huawei.hms.support.account.AccountAuthManager;
+import com.huawei.hms.support.account.result.AuthAccount;
 import com.jakewharton.rxbinding4.view.RxView;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
@@ -116,7 +121,7 @@ public abstract class BaseActivity extends AppCompatActivity {
         initBase();
         bindViews(this);
         initView();
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             mAliTVASRManager = new ASRClient(this);
             if (Consts.getTmailUserId().equals("-1")) {
                 TMailSDKUtil.getUserId(getBaseContext());
@@ -149,7 +154,9 @@ public abstract class BaseActivity extends AppCompatActivity {
         NetworkChangeReceiver.registerReceiver(this);
         NetworkChangeReceiver.registerObserver(NetStateChangeObserver);
         //注册百度广播
-        BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
+        }
         //注册小红花广播
         ShowFollowReceiver.registerReceiver(this);
         ShowFollowReceiver.registerObserver(showFollow);
@@ -502,9 +509,9 @@ public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onPause() {
         super.onPause();
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             mAliTVASRManager.release();
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             hasResume = false;
             if (mFloating != null) {
                 // 隐藏
@@ -518,7 +525,7 @@ public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onResume() {
         super.onResume();
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             try {
                 mAliTVASRManager.setOnASRCommandListener(mASRCommandListener);
                 mAliTVASRManager.setASRListenerType(OnASRCommandListener.ASRListenerType.DEFAULT_LISTENER);
@@ -528,7 +535,7 @@ public abstract class BaseActivity extends AppCompatActivity {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             hasResume = true;
             if (mFloating != null) {
                 mFloating.dismissFloatView();
@@ -543,7 +550,7 @@ public abstract class BaseActivity extends AppCompatActivity {
         PopWindowUtil.hidePopupWindow();
         Runtime.getRuntime().gc();
         System.gc();
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             mAliTVASRManager.release();
         }
         EApplication.mActivityList.remove(this);
@@ -672,7 +679,7 @@ public abstract class BaseActivity extends AppCompatActivity {
                             if (EfunboxUtil.isMobileNO(phone)) {
                                 Map<String, String> map = new HashMap<>();
                                 map.put("deviceCode", DeviceUuidFactory.getUuid());
-                                map.put("channel", Consts.getUmengChannel());
+                                map.put("channel", Consts.getUMengChannel());
                                 map.put("mobileNo", phone);
                                 map.put("nickName", EfunboxUtil.setPhoneMiddle(phone));
                                 Logger.e("Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId():" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
@@ -701,7 +708,7 @@ public abstract class BaseActivity extends AppCompatActivity {
                                         Consts.setmConstsUserBean(bean.getData());
                                         Logger.e("看看到底对没有:" + mGson.toJson(Consts.getmConstsUserBean()));
                                         refUserInfo(Consts.getmConstsUserBean());
-                                        Toast.makeText(topActivity, "登录成功", Toast.LENGTH_SHORT).show();
+                                        CusToast.getInstance(topActivity).show("登录成功", 3000);
                                         userApiServer.loginSign(topActivity, new Callback() {
                                             @Override
                                             public void onSuccess(HttpInfo info) throws IOException {
@@ -868,5 +875,98 @@ public abstract class BaseActivity extends AppCompatActivity {
     }
 
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+            //是华为联运渠道得
+            if (requestCode == HuaWeiUtil.REQUEST_SIGN_IN_LOGIN) {
+                //login success
+                //get user message by parseAuthResultFromIntent
+                Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
+                if (authAccountTask.isSuccessful()) {
+                    AuthAccount authAccount = authAccountTask.getResult();
+                    Logger.e(authAccount.getDisplayName() + " signIn success ");
+                    Logger.e("AccessToken: " + authAccount.getAccessToken());
+                    Logger.e("getUnionId: " + authAccount.getUnionId());
+                    Logger.e("getOpenId: " + authAccount.getOpenId());
+                    Logger.e("getOpenId: " + authAccount.getAvatarUri());
+                    Logger.e("getUid: " + authAccount.getUid());
+                } else {
+                    Logger.e("signIn failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());
+                }
+            }
+            if (requestCode == HuaWeiUtil.REQUEST_SIGN_IN_LOGIN_CODE) {
+                //login success
+                Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
+                if (authAccountTask.isSuccessful()) {
+                    AuthAccount authAccount = authAccountTask.getResult();
+                    Logger.e(authAccount.getDisplayName() + " signIn success ");
+                    HuaWeiRegisterByUnid(authAccount);
+
+
+                } else {
+                    Logger.e("signIn get code failed: " + ((ApiException) authAccountTask.getException()).getStatusCode());
+                }
+            }
+        }
+
+    }
+
+    private void HuaWeiRegisterByUnid(AuthAccount authAccount) {
+        UserApiServerImpl userApiServer = new UserApiServerImpl();
+        Activity topActivity = EApplication.mActivityList.get(EApplication.mActivityList.size() - 1);
+        Map<String, String> map = new HashMap<>();
+        map.put("deviceCode", DeviceUuidFactory.getUuid());
+        map.put("channel", Consts.getUMengChannel());
+        map.put("mobileNo", "");
+        map.put("nickName", authAccount.getDisplayName());
+        map.put("userId", authAccount.getUnionId());
+        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));
+        }
+
+        String json = mGson.toJson(map);
+        Logger.e("json:" + json);
+        userApiServer.registerUserId(topActivity, json, new Callback() {
+            @Override
+            public void onSuccess(HttpInfo info) throws IOException {
+                HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
+                }.getType());
+                Logger.e("华为注册:" + info.getRetDetail());
+                Consts.setUID(bean.getData().getUid());
+                //用户是否登录,登录了,创建Consts的userbean
+                Consts.setmConstsUserBean(bean.getData());
+                refUserInfo(Consts.getmConstsUserBean());
+                CusToast.getInstance(topActivity).show("登录成功", 3000);
+                userApiServer.loginSign(topActivity, new Callback() {
+                    @Override
+                    public void onSuccess(HttpInfo info) throws IOException {
+                        Logger.e("info:" + info.getRetDetail());
+                        HttpResultBean<SignBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<SignBean>>() {
+                        }.getType());
+                        if (bean.getData().getIsSign()) {
+                            CusToast.getInstance(topActivity).show("恭喜签到成功\n奖励" + bean.getData().getCount() + "朵小红花", 2000);
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(HttpInfo info) throws IOException {
+
+                    }
+                });
+                //检查活动
+                EfunboxUtil.checkEvents(topActivity);
+            }
+
+            @Override
+            public void onFailure(HttpInfo info) throws IOException {
+                Toast.makeText(topActivity, "注册失败", Toast.LENGTH_SHORT).show();
+            }
+        });
+    }
 }
 

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

@@ -4,8 +4,6 @@ import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Context;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -80,7 +78,9 @@ public abstract class BaseFragment extends Fragment {
     @Override
     public void onAttach(@NonNull Context context) {
         super.onAttach(context);
-        BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
+        }
     }
 
     @Override
@@ -235,7 +235,7 @@ public abstract class BaseFragment extends Fragment {
                             if (EfunboxUtil.isMobileNO(phone)) {
                                 Map<String, String> map = new HashMap<>();
                                 map.put("deviceCode", DeviceUuidFactory.getUuid());
-                                map.put("channel", Consts.getUmengChannel());
+                                map.put("channel", Consts.getUMengChannel());
                                 map.put("mobileNo", phone);
                                 map.put("nickName", EfunboxUtil.setPhoneMiddle(phone));
                                 Logger.e("Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId():" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
@@ -355,7 +355,7 @@ public abstract class BaseFragment extends Fragment {
     @Override
     public void onResume() {
         super.onResume();
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             if (!Consts.getIsNeedLogin()) {
                 BotRegisterListener.getBaiDuVipInfo();
             }

+ 8 - 0
app/src/main/java/com/edufound/reader/bean/ChannelCodeEnum.java

@@ -48,6 +48,14 @@ public enum ChannelCodeEnum {
         public String getChannelCode() {
             return "3009";
         }
+    },
+
+
+    XUNFEI {
+        //讯飞
+        public String getChannelCode() {
+            return "3010";
+        }
     };
 
 

+ 1 - 2
app/src/main/java/com/edufound/reader/bean/UserEventBean.java

@@ -1,7 +1,6 @@
 package com.edufound.reader.bean;
 
 import com.edufound.reader.util.Consts;
-import com.edufound.reader.util.TimeUtil;
 
 public class UserEventBean {
     public String action;
@@ -10,7 +9,7 @@ public class UserEventBean {
 
     public UserEventBean(String act) {
         this.action = act;
-        this.channel = Consts.getUmengChannel();
+        this.channel = Consts.getUMengChannel();
     }
 
     public String toJson() {

+ 2 - 6
app/src/main/java/com/edufound/reader/botsdk/BotRegisterListener.java

@@ -1,15 +1,11 @@
 package com.edufound.reader.botsdk;
 
-import com.baidu.duer.bot.directive.payload.AmountInfo;
 import com.baidu.duer.bot.event.payload.LinkClickedEventPayload;
-import com.baidu.duer.bot.event.payload.SellerOrderStructure;
 import com.baidu.duer.botsdk.BotIntent;
 import com.baidu.duer.botsdk.BotSdk;
 import com.baidu.duer.botsdk.IAccountChargeMsgListener;
-import com.baidu.duer.botsdk.util.RequestBotSdkUtil;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.util.Consts;
-import com.orhanobut.logger.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -21,7 +17,7 @@ public class BotRegisterListener {
 
 
     public static void registerListener(IBotIntentCallback iBotIntentCallback, IAccountChargeMsgListener iAccountChargeMsgListener) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //如果是百度。就注册百度的接口
             BotMessageListener.getInstance().addCallback(iBotIntentCallback);
             mIAccountListener.add(iAccountChargeMsgListener);
@@ -30,7 +26,7 @@ public class BotRegisterListener {
     }
 
     public static void removeListener(IBotIntentCallback iBotIntentCallback) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //如果是百度。就删除百度
             BotMessageListener.getInstance().removeCallback(iBotIntentCallback);
             if (mIAccountListener.size() > 0) {

+ 40 - 0
app/src/main/java/com/edufound/reader/contract/HuaWeiPayContract.java

@@ -0,0 +1,40 @@
+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 HuaWeiPayContract {
+    interface Model {
+        void HuaWeiPay(Activity activity, String json, Callback callback);
+
+        void HuaWeiPayContinuous(Activity activity, String json, Callback callback);
+    }
+
+    interface View extends BaseView {
+        void getProductSuccess();
+
+        void addUiClick(android.view.View view, Consumer onNext);
+    }
+
+    interface Presenter {
+        void getProductInfo();
+
+        void activityDestory();
+
+        void initPayItem(LinearLayout itemFrame);
+
+        void isEnvReady();
+
+        void checkAutoPay();
+
+        void onActivityResult(int requestCode, int resultCode, Intent data);
+
+        void checkOrder(int pricetype);
+    }
+}

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

@@ -65,6 +65,8 @@ public interface RecommendFragmentContract {
 
         RecommendFragment.ChangeCharacterListener getChangeCharacterListener();
 
+        RecyclerView getmRecyclerView();
+
 
     }
 

+ 8 - 0
app/src/main/java/com/edufound/reader/contract/SplashContract.java

@@ -10,11 +10,19 @@ public interface SplashContract {
     }
 
     interface View extends BaseView {
+
+        void toMainActivity();
     }
 
     interface Presenter {
         void getUserInfo(Intent intent);
 
         void initServiceText(TextView textView);
+
+        void initHuaWei();
+
+        void checkHuaWeiUpdate();
+
+        void onDestroy();
     }
 }

+ 13 - 2
app/src/main/java/com/edufound/reader/cusview/RvListJzvdStd.java

@@ -1049,6 +1049,15 @@ public class RvListJzvdStd extends Jzvd {
 //        CToast.makeText(jzvdContext, "onCompletion", 3000).show();
     }
 
+
+    @Override
+    public void onPrepared() {
+        super.onPrepared();
+        if (mCallBack != null) {
+            mCallBack.onPrepared();
+        }
+    }
+
     void resView() {
 
         mediaInterface.release();
@@ -1079,14 +1088,14 @@ public class RvListJzvdStd extends Jzvd {
     }
 
     public void postPlayLog(String readid) {
-        OkHttpClient.doPostAsync(new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/playLog").addParamJson("{\"userReadId\":\"" + readid + "\",\"playStopTime\":\"0\",\"channel\":\"" + Consts.getUmengChannel() + "\"}"), new Callback() {
+        OkHttpClient.doPostAsync(new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/playLog").addParamJson("{\"userReadId\":\"" + readid + "\",\"playStopTime\":\"0\",\"channel\":\"" + Consts.getUMengChannel() + "\"}"), new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
                 //播放记录
                 HttpResultBean<PlayLogBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<PlayLogBean>>() {
                 }.getType());
                 //
-                if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+                if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
                     /**
                      * 免责声明!!!!!!!!!!!!!!!!!!
                      *判断是否是官方的,官方的就是免费的。不是官方的就是收费的。但是无奈老板让收费的也播放。不知道什么意思。如有问题,请勿追究程序员责任。
@@ -1184,6 +1193,8 @@ public class RvListJzvdStd extends Jzvd {
         void onError(int what, int extra);
 
         void onInfo(int what, int extra);
+
+        void onPrepared();
     }
 
     public String getVideoTitle() {

+ 40 - 6
app/src/main/java/com/edufound/reader/fragment/RecommendFragment.java

@@ -42,8 +42,8 @@ import com.ufreedom.floatingview.FloatingBuilder;
 import com.ufreedom.floatingview.FloatingElement;
 
 import java.util.HashMap;
-import java.util.List;
 
+import cn.jzvd.Jzvd;
 import io.reactivex.rxjava3.annotations.Nullable;
 
 public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresenter> implements RecommendFragmentContract.View {
@@ -134,7 +134,7 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
         mUserReadCountLayout.setVisibility(View.GONE);
 
 
-        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //不是百度渠道得增加动画
             int scaleTime = 0;
             int rotateTime = 0;
@@ -183,7 +183,7 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
     protected void initViewListener() {
 
 
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
             //小米渠道,加个回调监听
             EfunboxUtil.setMISoundLoginCallBack(new PopWindowPresneter.MISoundLoginCallBack() {
                 @Override
@@ -482,8 +482,10 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
 
     @Override
     public void clearRecyclerView() {
-        mRecyclerView.removeAllViews();
-        mRecyclerView = null;
+        if (mRecyclerView != null) {
+            mRecyclerView.removeAllViews();
+            mRecyclerView = null;
+        }
     }
 
     @Override
@@ -519,6 +521,7 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
         super.onDestroy();
     }
 
+
     @Override
     public void onGetDisconnect() {
 
@@ -538,7 +541,33 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
     @Override
     public void onDestroyView() {
         super.onDestroyView();
-
+        Jzvd.releaseAllVideos();
+        getRootView().removeAllViews();
+        mREcommendLayout = null;
+        mRecyclerView = null;
+        mUserHeadLayout = null;
+        mCommentLayout = null;
+        mCollectionLayout = null;
+        mThumbsLayout = null;
+        mToRecordLayout = null;
+        mVideoUp = null;
+        mVideoNext = null;
+        mRotationImgAnim = null;
+        mToRecordRotationbg = null;
+        mToRecordScaleXAnim = null;
+        mToRecordScaleYAnim = null;
+        mToRecordScaleIcon = null;
+        mUserHead = null;
+        mUserPhone = null;
+        mCommentCount = null;
+        mCollentStatus = null;
+        mUserReadNum = null;
+        mThumbCount = null;
+        mCollectIconView = null;
+        isFollow = null;
+        mThumbIconView = null;
+        isUserVip = null;
+        mUserReadCountLayout = null;
     }
 
     @Override
@@ -591,6 +620,11 @@ public class RecommendFragment extends BaseMvpFragment<RecommendFragmentPresente
         return mChangeCharacterListener;
     }
 
+    @Override
+    public RecyclerView getmRecyclerView() {
+        return mRecyclerView;
+    }
+
 
     public interface ChangeCharacterListener {
         void changeDataList(UserRecordBean list);

+ 2 - 1
app/src/main/java/com/edufound/reader/interfaces/EfunboxInterfaces.java

@@ -2,7 +2,8 @@ package com.edufound.reader.interfaces;
 
 public class EfunboxInterfaces {
     public interface getYFVipInterfaces {
-        void success();
+        void success(long time);
+
         void error();
     }
 }

+ 5 - 12
app/src/main/java/com/edufound/reader/jsinterfaces/WebActivityJsInterfaces.java

@@ -1,19 +1,15 @@
 package com.edufound.reader.jsinterfaces;
 
 import android.content.Intent;
-import android.graphics.Color;
 import android.webkit.JavascriptInterface;
-import android.widget.Toast;
 
-import com.edufound.reader.activity.EventPayActivity;
-import com.edufound.reader.base.BaseActivity;
+import com.edufound.reader.activity.payactivity.EventPayActivity;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.contract.WebContract;
-import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUtil;
-import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.OkHttpClient;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
@@ -21,9 +17,6 @@ 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.Map;
@@ -49,7 +42,7 @@ public class WebActivityJsInterfaces {
 
     @JavascriptInterface
     public void toTMailPay(String json) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             //去天猫支付
             TMailSDKUtil.tmailPay(mView.getActivity(), json.toString());
         }
@@ -59,7 +52,7 @@ public class WebActivityJsInterfaces {
     public void efunboxQRPay(String productId, String orderId) {
         Logger.e("webview调用支付");
         OkHttpClient.doGetAsync(mView.getActivity(), new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/pay/efun/qrCode")
-                .addParam("channel", Consts.getUmengChannel()).addParam("productId", productId).addParam("activityId", mView.getActivityId()), new Callback() {
+                .addParam("channel", Consts.getUMengChannel()).addParam("productId", productId).addParam("activityId", mView.getActivityId()), new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
                 HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
@@ -79,7 +72,7 @@ public class WebActivityJsInterfaces {
     public String getParamsJson() {
         Map<String, String> map = new HashMap<>();
         map.put("uid", Consts.getUID());
-        map.put("channelCode", Consts.getUmengChannel());
+        map.put("channelCode", Consts.getUMengChannel());
         map.put("versionCode", DeviceUtil.getVersionCode(mView.getActivity()));
         return new Gson().toJson(map);
     }

+ 0 - 74
app/src/main/java/com/edufound/reader/miutil/MiSoundSDKUtil.java

@@ -1,74 +0,0 @@
-package com.edufound.reader.miutil;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.text.TextUtils;
-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.OrderApiServerImpl;
-import com.edufound.reader.apiserver.UserApiServerImpl;
-import com.edufound.reader.base.BaseActivity;
-import com.edufound.reader.bean.HttpResultBean;
-import com.edufound.reader.bean.UserBean;
-import com.edufound.reader.tmailsdk.TMailConstants;
-import com.edufound.reader.util.Consts;
-import com.edufound.reader.util.DeviceUuidFactory;
-import com.edufound.reader.util.EfunboxUtil;
-import com.edufound.reader.util.MMKVEncodeKey;
-import com.edufound.reader.util.MMKVUtil;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.okhttplib.HttpInfo;
-import com.okhttplib.callback.Callback;
-import com.orhanobut.logger.Logger;
-import com.xiaomi.mitv.client.MitvClient;
-import com.xiaomi.mitv.entity.OrderInfoParam;
-import com.xiaomi.mitv.exception.MitvCommonException;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class MiSoundSDKUtil {
-    private static Gson mGson;
-    public static final int MI_SOUND_QRCODE_TYPE = 0x19181;
-    public static final int MI_SOUND_QRCODE_UPDATE_USER=0x19184;
-    public static final int MI_SOUND_BIND_PHONENUM = 0x19182;
-    public static final int MI_SOUND_SHOW_BINDPHONENUM = 0x19183;
-
-    public static String getShortKey(String json) {
-        Logger.e("json:" + json);
-        if (mGson == null) {
-            mGson = new Gson();
-        }
-        OrderInfoParam orderInfoParam = mGson.fromJson(json, OrderInfoParam.class);
-//        orderInfoParam.setTrxAmount(1l);
-        String result = null;
-        try {
-            result = MitvClient.createShortkey(orderInfoParam, 0, 0, false);
-        } catch (MitvCommonException e) {
-            e.printStackTrace();
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        Logger.e("result:" + result);
-        return result;
-    }
-}

+ 26 - 0
app/src/main/java/com/edufound/reader/model/HuaWeiPayModel.java

@@ -0,0 +1,26 @@
+package com.edufound.reader.model;
+
+import android.app.Activity;
+
+import com.edufound.reader.contract.HuaWeiPayContract;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.OkHttpClient;
+import com.okhttplib.HttpInfo;
+import com.okhttplib.callback.Callback;
+
+public class HuaWeiPayModel implements HuaWeiPayContract.Model {
+    private final String API = Consts.getFinalApi();
+
+
+    @Override
+    public void HuaWeiPay(Activity activity, String json, Callback callback) {
+        OkHttpClient.doPostAsync(activity, new HttpInfo.Builder().setUrl(API + "/order").addParamJson(json), callback);
+
+    }
+
+    @Override
+    public void HuaWeiPayContinuous(Activity activity, String json, Callback callback) {
+        OkHttpClient.doPostAsync(activity, new HttpInfo.Builder().setUrl(API + "/order/continuous").addParamJson(json), callback);
+
+    }
+}

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

@@ -18,6 +18,6 @@ public class PayModel implements PayContract.Model {
 
     @Override
     public void getPayQRCode(Activity activity, String productId, Callback callback) {
-        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/pay/efun/qrCode").addParam("channel", Consts.getUmengChannel()).addParam("productId", productId), callback);
+        OkHttpClient.doGetAsync(activity, new HttpInfo.Builder().setUrl(API + "/pay/efun/qrCode").addParam("channel", Consts.getUMengChannel()).addParam("productId", productId), callback);
     }
 }

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

@@ -6,7 +6,6 @@ import android.content.Context;
 import android.graphics.Color;
 import android.graphics.PointF;
 import android.net.Uri;
-import android.os.FileUtils;
 import android.view.Display;
 import android.view.Gravity;
 import android.view.KeyEvent;
@@ -19,11 +18,9 @@ import android.widget.ImageView;
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
-import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.DataSource;
 import com.bumptech.glide.load.engine.GlideException;
 import com.bumptech.glide.request.RequestListener;
-import com.bumptech.glide.request.target.SimpleTarget;
 import com.bumptech.glide.request.target.Target;
 import com.davemorrissey.labs.subscaleview.ImageSource;
 import com.davemorrissey.labs.subscaleview.ImageViewState;
@@ -37,7 +34,7 @@ import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.cusview.GridRadioGroup;
 import com.edufound.reader.listener.PopUtilClickListener;
 import com.edufound.reader.listener.PopupRecordStatusListener;
-import com.edufound.reader.miutil.MiSoundSDKUtil;
+import com.edufound.reader.util.miutil.MiSoundSDKUtil;
 import com.edufound.reader.presenter.PopWindowPresneter;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DataCleanManager;
@@ -54,7 +51,6 @@ import java.util.concurrent.TimeUnit;
 
 import androidx.annotation.Nullable;
 import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.recyclerview.widget.RecyclerView;
 
 import io.reactivex.rxjava3.functions.Consumer;
 
@@ -565,7 +561,8 @@ public class PopWindowUtil {
 
     private static void showDeviceInfo(Activity context) {
         StringBuffer buffer = new StringBuffer();
-        buffer.append("\tapk渠道:\t" + "\t" + Consts.getUmengChannel() + "\n");
+        buffer.append("\tpackageName:\t\t" + context.getPackageName() + "\n");
+        buffer.append("\tapk渠道:\t" + "\t" + Consts.getUMengChannel() + "\n");
         buffer.append("\tUUID:\t" + "\t" + DeviceUuidFactory.getUuid() + "\n");
 //        buffer.append("\t设备SN号:\t\t" + DeviceUtil.getSerialNumber() + "\n");
         buffer.append("\t厂商:\t" + "\t" + DeviceUtil.getDeviceBrand() + "\n");
@@ -583,7 +580,7 @@ public class PopWindowUtil {
             buffer.append("\t注册渠道:\t\t" + Consts.getmConstsUserBean().getChannel() + "\n");
         }
 
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode()) && Consts.getmConstsBaiDuUserBean() != null) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode()) && Consts.getmConstsBaiDuUserBean() != null) {
             buffer.append("\t百度UserId:\t\t" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId() + "\n");
         }
         View infoView = LayoutInflater.from(context).inflate(R.layout.window_deviceinfo, null);

+ 55 - 49
app/src/main/java/com/edufound/reader/presenter/CharacterFragmentPresenterVersionThree.java

@@ -1,15 +1,11 @@
 package com.edufound.reader.presenter;
 
 import android.content.Context;
-import android.graphics.Color;
-import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.FrameLayout;
 import android.widget.GridLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -19,9 +15,7 @@ import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
 import com.edufound.reader.R;
-import com.edufound.reader.activity.SmallFullVideoActivity;
 import com.edufound.reader.apiserver.UserApiServerImpl;
-import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.HttpResultDataListBean;
@@ -32,7 +26,6 @@ import com.edufound.reader.fragment.RecommendFragment;
 import com.edufound.reader.model.CharacterFragmentModel;
 import com.edufound.reader.util.EfunboxUtil;
 import com.edufound.reader.util.GlideUtils;
-import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.SizeUtils;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
@@ -109,6 +102,7 @@ public class CharacterFragmentPresenterVersionThree extends BasePresenter<Charac
     public void onDestory(GridLayout layout, LinearLayout linearLayout) {
         if (mCharacterHandler != null) {
             mCharacterHandler.removeMessages(CharacterFragmentModel.LOAD_GRID);
+            mCharacterHandler.removeMessages(0x33312);
             mCharacterHandler = null;
             if (mRecommendFragment != null) {
                 mFragmentManager.beginTransaction().remove(mRecommendFragment);
@@ -202,13 +196,14 @@ public class CharacterFragmentPresenterVersionThree extends BasePresenter<Charac
                 mCharacterHandler.removeMessages(0x33312);
 
                 Message message = new Message();
-                TestBean ttt = new TestBean();
-                ttt.data = data;
-                ttt.i = finalI;
-                ttt.index = index;
-                ttt.linearLayout = linearLayout;
-                ttt.view = view;
-                message.obj = ttt;
+                RecommendBean bean = new RecommendBean();
+                bean.data = data;
+                bean.i = finalI;
+                bean.index = index;
+                bean.linearLayout = linearLayout;
+                bean.view = view;
+                bean.readMount = EfunboxUtil.checkNum10000(data.get(finalI).getUserRead().getReadAmount());
+                message.obj = bean;
                 message.what = 0x33312;
                 mCharacterHandler.sendMessageDelayed(message, 100);
             });
@@ -246,6 +241,7 @@ public class CharacterFragmentPresenterVersionThree extends BasePresenter<Charac
 
     @Override
     public void onPause() {
+        mCharacterHandler.removeMessages(0x33312);
     }
 
     Handler mCharacterHandler = new Handler(new Handler.Callback() {
@@ -263,7 +259,7 @@ public class CharacterFragmentPresenterVersionThree extends BasePresenter<Charac
                         mRecommendFragment = null;
                     }
 
-                    TestBean ttt = (TestBean) msg.obj;
+                    RecommendBean ttt = (RecommendBean) msg.obj;
                     String id = ttt.data.get(ttt.i).getUserRead().getId();
 
                     if (mView != null) {
@@ -275,42 +271,51 @@ public class CharacterFragmentPresenterVersionThree extends BasePresenter<Charac
 
 //                        mRecommendFragment.getChangeCharacterListener().changeDataList(bean.getData());
 
-                                mRecommendFragment = new RecommendFragment(2);
-                                FragmentTransaction transaction = mFragmentManager.beginTransaction();
-                                transaction.addToBackStack(null);
-                                transaction.replace(R.id.character_version_three_fragment_layout, mRecommendFragment);
-                                List<UserRecordBean> sss = new ArrayList<>();
-                                sss.add(bean.getData());
-                                mRecommendFragment.setDataJson(new Gson().toJson(sss));
-                                mRecommendFragment.hiddenBottomView();
-                                mRecommendFragment.showUserReadCount(true);
-                                mRecommendFragment.setLayoutViewScale(0.92f, 0.92f);
-                                mRecommendFragment.setChangeCharacterListener(new RecommendFragment.ChangeCharacterListener() {
-                                    @Override
-                                    public void changeDataList(UserRecordBean list) {
-                                        mRecommendFragment.setTopStatus(list);
+                                try {
+                                    if (mView.getFragmentLayout() == null) {
+                                        return;
                                     }
-                                });
-                                transaction.commit();
-                                ttt.linearLayout.removeView(mView.getFragmentLayout());
-                                if (ttt.index - 1 < 0) {
-                                    ttt.linearLayout.addView(mView.getFragmentLayout(), 0);
-                                } else {
-                                    ttt.linearLayout.addView(mView.getFragmentLayout(), ttt.index);
-                                }
-                                mView.getFragmentLayout().setVisibility(View.VISIBLE);
-
-                                mView.getScrllView().postDelayed(new Runnable() {
-                                    @Override
-                                    public void run() {
-                                        //- SizeUtils.dp2px(mContext, 100)
-                                        if (mView != null) {
-                                            if (mView.getScrllView() != null) {
-                                                mView.getScrllView().smoothScrollTo(mView.getFragmentLayout().getLeft() + ttt.view.getWidth() - (ttt.view.getWidth() / 6), 0);
-                                            }
+                                    mRecommendFragment = new RecommendFragment(2);
+                                    FragmentTransaction transaction = mFragmentManager.beginTransaction();
+                                    transaction.addToBackStack(null);
+                                    transaction.replace(R.id.character_version_three_fragment_layout, mRecommendFragment);
+                                    List<UserRecordBean> sss = new ArrayList<>();
+                                    bean.getData().getUserRead().setReadAmount(ttt.readMount);
+                                    sss.add(bean.getData());
+                                    mRecommendFragment.setDataJson(new Gson().toJson(sss));
+                                    mRecommendFragment.hiddenBottomView();
+                                    mRecommendFragment.showUserReadCount(true);
+                                    mRecommendFragment.setLayoutViewScale(0.92f, 0.92f);
+                                    mRecommendFragment.setChangeCharacterListener(new RecommendFragment.ChangeCharacterListener() {
+                                        @Override
+                                        public void changeDataList(UserRecordBean list) {
+                                            mRecommendFragment.setTopStatus(list);
                                         }
+                                    });
+                                    transaction.commit();
+                                    ttt.linearLayout.removeView(mView.getFragmentLayout());
+                                    if (ttt.index - 1 < 0) {
+                                        ttt.linearLayout.addView(mView.getFragmentLayout(), 0);
+                                    } else {
+                                        ttt.linearLayout.addView(mView.getFragmentLayout(), ttt.index);
                                     }
-                                }, 200);
+                                    mView.getFragmentLayout().setVisibility(View.VISIBLE);
+
+                                    mView.getScrllView().postDelayed(new Runnable() {
+                                        @Override
+                                        public void run() {
+                                            //- SizeUtils.dp2px(mContext, 100)
+                                            if (mView != null) {
+                                                if (mView.getScrllView() != null) {
+                                                    mView.getScrllView().smoothScrollTo(mView.getFragmentLayout().getLeft() + ttt.view.getWidth() - (ttt.view.getWidth() / 6), 0);
+                                                }
+                                            }
+                                        }
+                                    }, 200);
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+
                             }
 
                             @Override
@@ -331,10 +336,11 @@ public class CharacterFragmentPresenterVersionThree extends BasePresenter<Charac
 
 }
 
-class TestBean {
+class RecommendBean {
     LinearLayout linearLayout;
     List<UserRecordBean> data;
     int index;
     int i;
+    String readMount;
     View view;
 }

+ 5 - 9
app/src/main/java/com/edufound/reader/presenter/EventPayPresenter.java

@@ -2,13 +2,10 @@ package com.edufound.reader.presenter;
 
 import android.app.Activity;
 import android.content.Intent;
-import android.graphics.Rect;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.Toast;
 
-import androidx.recyclerview.widget.RecyclerView;
-
 import com.edufound.reader.adapter.EventPayItemAdapter;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.base.BaseActivity;
@@ -16,12 +13,11 @@ import com.edufound.reader.base.BasePresenter;
 import com.edufound.reader.bean.ActivityEventPayBean;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
-import com.edufound.reader.bean.PayResultBean;
 import com.edufound.reader.contract.EventPayContract;
 import com.edufound.reader.listener.RecyclerItemClickListener;
 import com.edufound.reader.model.EventPayModel;
 import com.edufound.reader.model.TmailPayModel;
-import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.GlideUtils;
 import com.google.gson.reflect.TypeToken;
@@ -82,13 +78,13 @@ public class EventPayPresenter extends BasePresenter<EventPayContract.View> impl
     }
 
     public void toPayByChannel(ActivityEventPayBean resultBean) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode())) {
 
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             //天猫支付
             Map<String, String> params = new HashMap<>();
             params.put("productId", resultBean.getProduct().getId());
-            params.put("channel", Consts.getUmengChannel());
+            params.put("channel", Consts.getUMengChannel());
             params.put("payType", resultBean.getProduct().getPayType());
             params.put("uid", Consts.getmConstsUserBean().getUid());
             params.put("first", "false");
@@ -151,7 +147,7 @@ public class EventPayPresenter extends BasePresenter<EventPayContract.View> impl
 
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             //天猫支付返回
             if (requestCode == TMailSDKUtil.TMAIL_PAY_RESULT_CODE && resultCode == Activity.RESULT_OK) {
                 if (data != null) {

+ 581 - 0
app/src/main/java/com/edufound/reader/presenter/HuaWeiPayPresenter.java

@@ -0,0 +1,581 @@
+package com.edufound.reader.presenter;
+
+import android.content.Intent;
+import android.content.IntentSender;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+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 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.HuaWeiPayContract;
+import com.edufound.reader.cusview.CusToast;
+import com.edufound.reader.interfaces.EfunboxInterfaces;
+import com.edufound.reader.model.HuaWeiPayModel;
+import com.edufound.reader.util.Consts;
+import com.edufound.reader.util.EfunboxUtil;
+import com.google.gson.reflect.TypeToken;
+import com.huawei.hmf.tasks.OnFailureListener;
+import com.huawei.hmf.tasks.OnSuccessListener;
+import com.huawei.hmf.tasks.Task;
+import com.huawei.hms.iap.Iap;
+import com.huawei.hms.iap.IapApiException;
+import com.huawei.hms.iap.entity.ConsumeOwnedPurchaseReq;
+import com.huawei.hms.iap.entity.ConsumeOwnedPurchaseResult;
+import com.huawei.hms.iap.entity.InAppPurchaseData;
+import com.huawei.hms.iap.entity.IsEnvReadyResult;
+import com.huawei.hms.iap.entity.OrderStatusCode;
+import com.huawei.hms.iap.entity.OwnedPurchasesReq;
+import com.huawei.hms.iap.entity.OwnedPurchasesResult;
+import com.huawei.hms.iap.entity.PurchaseIntentReq;
+import com.huawei.hms.iap.entity.PurchaseIntentResult;
+import com.huawei.hms.iap.entity.PurchaseResultInfo;
+import com.huawei.hms.iap.util.IapClientHelper;
+import com.huawei.hms.support.api.client.Status;
+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 HuaWeiPayPresenter extends BasePresenter<HuaWeiPayContract.View> implements HuaWeiPayContract.Presenter {
+
+
+    HuaWeiPayModel mModel;
+    OrderApiServerImpl mOrderApi;
+    List<PayResultBean> mPayResult;
+    HuaWeiPayBean payBean;
+    String HuaWeiPayType = "";
+
+    public HuaWeiPayPresenter() {
+        this.mModel = new HuaWeiPayModel();
+        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 {
+                Logger.e("error:" + info.getRetDetail());
+            }
+        });
+    }
+
+    @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);
+        }
+
+    }
+
+
+    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(0, ViewGroup.LayoutParams.MATCH_PARENT, 1));
+        view.animate().scaleX(0.9f).scaleY(0.9f).setDuration(0).start();
+        PayItemHolder holder = new PayItemHolder(view);
+        holder.mTitle.setText(mPayResult.get(position).getTitle());
+        holder.mPayMoney.setText(String.valueOf(Integer.parseInt(mPayResult.get(position).getPrice()) / 100));
+        holder.mRecommend.setVisibility(View.VISIBLE);
+        holder.mOriginPrice.setText("原价¥ " + String.valueOf(Integer.parseInt(mPayResult.get(position).getOriginPrice()) / 100));
+        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 -> {
+            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");
+            //连续包月走单独接口
+            //创建订单,然后调用华为支付
+            //先判断是否登录华为账号了,然后再进行支付处理isEnvReady
+            //0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
+            String json = ((BaseActivity) mView.getActivity()).getGson().toJson(params);
+            if (mPayResult.get(position).getPayType().equals("CONSECUTIVE_MONTH")) {
+                //连续包月
+                HuaWeiPayType = "2";
+                mModel.HuaWeiPayContinuous(mView.getActivity(), json, createOrderCallBack);
+            } else {
+                HuaWeiPayType = "0";
+                mModel.HuaWeiPay(mView.getActivity(), json, createOrderCallBack);
+
+            }
+
+
+        });
+        itemFrame.addView(view);
+        if (position >= mPayResult.size() - 1) {
+//            Logger.e("position:" + position);
+//            Logger.e("mPayResult.size():" + mPayResult.size());
+//            itemFrame.getChildAt(0).performClick();
+        }
+    }
+
+
+    Callback createOrderCallBack = 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);
+                //缺少参数
+                payBean = new HuaWeiPayBean();
+                payBean.orderId = json.getString("orderId");
+                payBean.productIds = json.getString("productId");
+                payBean.priceType = HuaWeiPayType;
+                toPay(payBean);
+            } 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();
+        }
+    };
+
+
+    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:
+                    break;
+            }
+            return false;
+        }
+    });
+
+
+    @Override
+    public void isEnvReady() {
+        // 获取调用接口的Activity对象
+        Task<IsEnvReadyResult> task = Iap.getIapClient(mView.getActivity()).isEnvReady();
+        task.addOnSuccessListener(new OnSuccessListener<IsEnvReadyResult>() {
+            @Override
+            public void onSuccess(IsEnvReadyResult result) {
+                // 获取接口请求的结果
+                String carrierId = result.getCarrierId();
+                Logger.e("onSuccess=carrierId:" + carrierId);
+                if (payBean != null) {
+                    toPay(payBean);
+                } else {
+                    CusToast.getInstance(mView.getActivity()).show("payBean==null", 3000);
+                }
+            }
+        }).addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                if (e instanceof IapApiException) {
+                    IapApiException apiException = (IapApiException) e;
+                    Status status = apiException.getStatus();
+                    if (status.getStatusCode() == OrderStatusCode.ORDER_HWID_NOT_LOGIN) {
+                        // 未登录帐号
+                        if (status.hasResolution()) {
+                            try {
+                                // 6666是您自定义的常量
+                                // 启动IAP返回的登录页面
+                                status.startResolutionForResult(mView.getActivity(), 6666);
+                            } catch (IntentSender.SendIntentException exp) {
+                            }
+                        }
+                    } else if (status.getStatusCode() == OrderStatusCode.ORDER_ACCOUNT_AREA_NOT_SUPPORTED) {
+                        // 用户当前登录的华为帐号所在的服务地不在华为IAP支持结算的国家/地区中
+                    }
+                } else {
+                    // 其他外部错误
+                }
+            }
+        });
+
+    }
+
+    //补单
+    @Override
+    public void checkOrder(int pricetype) {
+        Logger.e("补单:" + pricetype);
+        // 构造一个OwnedPurchasesReq对象
+        OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
+        // priceType: 0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
+        ownedPurchasesReq.setPriceType(pricetype);
+        // 获取调用接口的Activity对象
+        // 调用obtainOwnedPurchases接口获取所有已购但未发货的消耗型商品的购买信息
+        Task<OwnedPurchasesResult> task = Iap.getIapClient(mView.getActivity()).obtainOwnedPurchases(ownedPurchasesReq);
+        task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
+            @Override
+            public void onSuccess(OwnedPurchasesResult result) {
+                // 获取接口请求成功的结果
+                if (result != null && result.getInAppPurchaseDataList() != null) {
+                    for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
+                        String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
+                        String inAppSignature = result.getInAppSignature().get(i);
+                        Logger.e("inAppPurchaseData:" + inAppPurchaseData);
+                        if (inAppPurchaseData != null) {
+                            sendProduct(inAppPurchaseData);
+                        }
+                        // 使用应用的IAP公钥验证inAppPurchaseData的签名数据
+                        // 如果验签成功,确认每个商品的购买状态。确认商品已支付后,检查此前是否已发过货,未发货则进行发货操作。发货成功后执行消耗操作
+                    }
+
+                }
+            }
+        }).addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                if (e instanceof IapApiException) {
+                    IapApiException apiException = (IapApiException) e;
+                    Status status = apiException.getStatus();
+                    int returnCode = apiException.getStatusCode();
+                } else {
+                    // 其他外部错误
+                }
+            }
+        });
+    }
+
+    @Override
+    public void checkAutoPay() {
+        // 构造一个OwnedPurchasesReq对象
+        OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
+        // priceType: 2:订阅型商品
+        ownedPurchasesReq.setPriceType(2);
+        // 调用obtainOwnedPurchases接口
+        Task<OwnedPurchasesResult> task = Iap.getIapClient(mView.getActivity()).obtainOwnedPurchases(ownedPurchasesReq);
+        task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
+            @Override
+            public void onSuccess(OwnedPurchasesResult result) {
+                // 获取接口请求结果
+                if (result != null && result.getInAppPurchaseDataList() != null) {
+                    for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
+                        String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
+                        String inAppSignature = result.getInAppSignature().get(i);
+                        // 您需要使用您的应用的IAP公钥验证inAppPurchaseData的签名
+                        // 如果验签成功,请检查支付状态和订阅状态
+                        try {
+                            InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData);
+                            int purchaseState = inAppPurchaseDataBean.getPurchaseState();
+                            boolean isSubValid = inAppPurchaseDataBean.isSubValid();
+                            /**
+                             *
+                             * true:表示商品已经收费且未过期,也没有发生退款;商品处于宽限期。您可以基于该标志为顾客提供服务。
+                             * false:未完成购买或者已经过期,或者购买后已经退款。
+                             *
+                             * */
+                            if (isSubValid) {
+                                //已购买,刷新用户信息
+//                                MainActivity.getIntences().loadJsMehtod("HuaWeiAutoPayResult('" + true + "')");
+
+                            } else {
+                                //未购买,刷新用户信息
+//                                MainActivity.getIntences().loadJsMehtod("HuaWeiAutoPayResult('" + false + "')");
+                            }
+                            EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
+
+                                @Override
+                                public void success(long time) {
+
+                                }
+
+                                @Override
+                                public void error() {
+
+                                }
+                            });
+                        } catch (JSONException e) {
+                        }
+                    }
+                }
+            }
+        }).addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                if (e instanceof IapApiException) {
+                    IapApiException apiException = (IapApiException) e;
+                    Status status = apiException.getStatus();
+                    int returnCode = apiException.getStatusCode();
+                } else {
+                    // 其他外部错误
+                }
+            }
+        });
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == 6666) {
+            if (data != null) {
+                // 使用parseRespCodeFromIntent方法获取接口请求结果
+                int returnCode = IapClientHelper.parseRespCodeFromIntent(data);
+                if (returnCode == OrderStatusCode.ORDER_STATE_SUCCESS) {
+                    //支持支付
+                    // 使用parseCarrierIdFromIntent方法获取接口返回的运营商ID
+                    String carrierId = IapClientHelper.parseCarrierIdFromIntent(data);
+                    Logger.e("onActivityResult--carrierId:" + carrierId);
+                    if (payBean != null) {
+                        toPay(payBean);
+                    } else {
+                        CusToast.getInstance(mView.getActivity()).show("payBean==null", 3000);
+                    }
+                }
+
+            }
+        } else if (requestCode == 9999) {
+            //支付返回
+            // 调用parsePurchaseResultInfoFromIntent方法解析支付结果数据
+            PurchaseResultInfo purchaseResultInfo = Iap.getIapClient(mView.getActivity()).parsePurchaseResultInfoFromIntent(data);
+            switch (purchaseResultInfo.getReturnCode()) {
+                case OrderStatusCode.ORDER_STATE_CANCEL:
+                    // 用户取消
+//                    Toast.makeText(mActivity, "用户取消支付", Toast.LENGTH_SHORT).show();
+                    CusToast.getInstance(mView.getActivity()).show("取消支付", 3000);
+                    break;
+                case OrderStatusCode.ORDER_STATE_FAILED:
+                case OrderStatusCode.ORDER_STATE_DEFAULT_CODE:
+                case OrderStatusCode.ORDER_PRODUCT_OWNED:
+                    // 检查是否存在未发货商品
+                    Logger.e("\"支付失败:\" + purchaseResultInfo.getReturnCode():" + purchaseResultInfo.getReturnCode());
+                    CusToast.getInstance(mView.getActivity()).show("支付失败:" + purchaseResultInfo.getReturnCode(), 3000);
+                    break;
+                case OrderStatusCode.ORDER_STATE_SUCCESS:
+                    // 支付成功
+                    String inAppPurchaseData = purchaseResultInfo.getInAppPurchaseData();
+                    String inAppPurchaseDataSignature = purchaseResultInfo.getInAppDataSignature();
+                    Logger.e("支付成功:" + inAppPurchaseData);
+                    CusToast.getInstance(mView.getActivity()).show("支付成功", 3000);
+                    // 使用您应用的IAP公钥验证签名
+                    // 若验签成功,则进行发货
+                    // 若用户购买商品为消耗型商品,您需要在发货成功后调用consumeOwnedPurchase接口进行消耗
+                    if (Integer.valueOf(payBean.priceType) == 0) {
+                        //消耗型产品
+                        //发货
+//                        MainActivity.getIntences().loadJsMehtod("HuaWeiPayResult(" + true + ")");
+                        sendProduct(inAppPurchaseData);
+                    } else if (Integer.valueOf(payBean.priceType) == 1) {
+                        //非消耗型产品
+                    } else if (Integer.valueOf(payBean.priceType) == 2) {
+                        //订阅型产品
+                        checkAutoPay();
+                    }
+//                    finish();
+                    break;
+                default:
+                    Logger.e("支付default:purchaseResultInfo.getReturnCode():" + purchaseResultInfo.getReturnCode());
+                    break;
+            }
+        }
+    }
+
+
+    public void toPay(HuaWeiPayBean bean) {
+        if (bean == null) {
+            CusToast.getInstance(mView.getActivity()).show("payBean==null", 3000);
+            return;
+        }
+        // 构造一个PurchaseIntentReq对象
+        PurchaseIntentReq req = new PurchaseIntentReq();
+        // 通过createPurchaseIntent接口购买的商品必须是您在AppGallery Connect网站配置的商品
+        req.setProductId(bean.productIds);
+        // priceType: 0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
+        if (TextUtils.isEmpty(bean.priceType)) {
+            bean.priceType = "0";
+        }
+        req.setPriceType(Integer.valueOf(bean.priceType));
+        req.setDeveloperPayload(bean.orderId);
+        // 获取调用接口的Activity对象
+        // 调用createPurchaseIntent接口创建托管商品订单
+        Task<PurchaseIntentResult> task = Iap.getIapClient(mView.getActivity()).createPurchaseIntent(req);
+        task.addOnSuccessListener(new OnSuccessListener<PurchaseIntentResult>() {
+            @Override
+            public void onSuccess(PurchaseIntentResult result) {
+                // 获取创建订单的结果
+                Status status = result.getStatus();
+                if (status.hasResolution()) {
+                    try {
+                        // 启动IAP返回的收银台页面
+                        status.startResolutionForResult(mView.getActivity(), 9999);
+                    } catch (IntentSender.SendIntentException exp) {
+                    }
+                }
+            }
+        }).addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                if (e instanceof IapApiException) {
+                    IapApiException apiException = (IapApiException) e;
+                    Status status = apiException.getStatus();
+                    int returnCode = apiException.getStatusCode();
+                    Logger.e("支付调用失败:" + status + "--returnCode=" + returnCode);
+                } else {
+                    // 其他外部错误
+                }
+                CusToast.getInstance(mView.getActivity()).show("支付调用失败", 3000);
+            }
+        });
+    }
+
+
+    //发货
+    public void sendProduct(String data) {
+
+        InAppPurchaseData inAppPurchaseDataBean = null;
+        try {
+            inAppPurchaseDataBean = new InAppPurchaseData(data);
+            int purchaseState = inAppPurchaseDataBean.getPurchaseState();
+            int consumptionState = inAppPurchaseDataBean.getConsumptionState();
+            if (purchaseState == 0 && consumptionState == 0) {
+                //购买成功但是未消耗,开始发货
+                //支付成功
+                Logger.e("准备发货");
+                String purchaseToken = inAppPurchaseDataBean.getPurchaseToken();
+
+                ConsumeOwnedPurchaseReq req = new ConsumeOwnedPurchaseReq();
+                req.setPurchaseToken(purchaseToken);
+                Task<ConsumeOwnedPurchaseResult> task = Iap.getIapClient(mView.getActivity()).consumeOwnedPurchase(req);
+                task.addOnSuccessListener(new OnSuccessListener<ConsumeOwnedPurchaseResult>() {
+                    @Override
+                    public void onSuccess(ConsumeOwnedPurchaseResult result) {
+                        // 获取接口请求结果
+                        Logger.e("发货成功");
+                        EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
+
+                            @Override
+                            public void success(long time) {
+
+                            }
+
+                            @Override
+                            public void error() {
+
+                            }
+                        });
+                    }
+                }).addOnFailureListener(new OnFailureListener() {
+                    @Override
+                    public void onFailure(Exception e) {
+                        if (e instanceof IapApiException) {
+                            IapApiException apiException = (IapApiException) e;
+                            Status status = apiException.getStatus();
+                            int returnCode = apiException.getStatusCode();
+                        } else {
+                            // 其他外部错误
+                        }
+                    }
+                });
+
+            } else if (purchaseState == 0 && consumptionState == 1) {
+                Logger.e("已购买并且已经发货了");
+                EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
+
+                    @Override
+                    public void success(long time) {
+
+                    }
+
+                    @Override
+                    public void error() {
+
+                    }
+                });
+            } else {
+                Logger.e("发货失败");
+                Logger.e("purchaseState:" + purchaseState);
+                Logger.e("consumptionState:" + consumptionState);
+            }
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    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);
+        }
+    }
+
+
+    class HuaWeiPayBean {
+
+        public String productIds;
+        public String priceType;
+        public String orderId;
+    }
+}

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

@@ -27,7 +27,6 @@ import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.LoginAlertContract;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.interfaces.EfunboxInterfaces;
-import com.edufound.reader.miutil.MiSoundSDKUtil;
 import com.edufound.reader.model.LoginAlertModel;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
@@ -159,11 +158,11 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                 //输入的和返回的是一样的
                 //请求接口,根据phoneNum,Integer.valueOf(inputVCode)
                 Map<String, String> params = new HashMap<>();
-                params.put("channel", Consts.getUmengChannel());
+                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("channel", Consts.getUMengChannel());
                 params.put("verify", "true");
                 if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
                     //如果没有,默认给一年级
@@ -181,8 +180,9 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                         //用户是否登录,登录了,创建Consts的userbean
                         Consts.setmConstsUserBean(bean.getData());
                         EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
+
                             @Override
-                            public void success() {
+                            public void success(long time) {
                                 mView.getActivity().finish();
                             }
 
@@ -303,7 +303,7 @@ public class LoginAlertPresenter extends BasePresenter<LoginAlertContract.View>
                                             } catch (Exception e) {
                                                 e.printStackTrace();
                                             } finally {
-                                                if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+                                                if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
                                                     //不是小度的,检查权限
                                                     if (Consts.getmConstsUserBean() != null) {
                                                         mOrderApi.getAuth(new Callback() {

+ 15 - 19
app/src/main/java/com/edufound/reader/presenter/MainPresenter.java

@@ -18,26 +18,17 @@ import com.edufound.reader.R;
 import com.edufound.reader.apiserver.ActivityEventServerImpl;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.apiserver.UserApiServerImpl;
+import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
 import com.edufound.reader.bean.ActivityEventBean;
 import com.edufound.reader.bean.ChannelCodeEnum;
-import com.edufound.reader.bean.ExampleBean;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.SignBean;
 import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.bean.UserEventEnum;
-import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.contract.MainContract;
 import com.edufound.reader.cusview.CusToast;
-import com.edufound.reader.cusview.ModelViewA;
-import com.edufound.reader.cusview.ModelViewB;
-import com.edufound.reader.cusview.ModelViewC;
-import com.edufound.reader.cusview.ModelViewD;
-import com.edufound.reader.cusview.ModelViewE;
-import com.edufound.reader.cusview.ModelViewF;
-import com.edufound.reader.cusview.ModelViewWidthA;
-import com.edufound.reader.fragment.CharacterFragment;
 import com.edufound.reader.fragment.CharacterFragment3;
 import com.edufound.reader.fragment.EventFragment;
 import com.edufound.reader.fragment.MyTabFragment;
@@ -60,9 +51,7 @@ 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;
 
 import androidx.fragment.app.Fragment;
@@ -183,11 +172,18 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
 
 
     void changeFragmentLayout(Fragment fragment) {
-        ((BaseActivity) mView.getActivity()).removeFirstTipView();
-        FragmentTransaction transaction = mFragmentManager.beginTransaction();
-        transaction.addToBackStack(null);
-        transaction.replace(R.id.main_fragment_layout, fragment);
-        transaction.commit();
+        try {
+            ((BaseActivity) mView.getActivity()).removeFirstTipView();
+            FragmentTransaction transaction = mFragmentManager.beginTransaction();
+            transaction.addToBackStack(null);
+            transaction.replace(R.id.main_fragment_layout, fragment);
+            transaction.commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CusToast.getInstance(mView.getActivity()).show("出现问题,重启应用", 3000);
+            EApplication.reloadApp(2);
+        }
+
     }
 
 
@@ -393,7 +389,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
     }
 
     private void getYFVip() {
-        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //不是百度渠道,检查是否是义方VIP
             if (Consts.getmConstsUserBean() != null) {
                 mOrderApi.getAuth(mView.getActivity(), new Callback() {
@@ -422,7 +418,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> implements M
         if (EfunboxUtil.isMobileNO(mobileNo)) {
             Map<String, String> map = new HashMap<>();
             map.put("deviceCode", DeviceUuidFactory.getUuid());
-            map.put("channel", Consts.getUmengChannel());
+            map.put("channel", Consts.getUMengChannel());
             map.put("mobileNo", mobileNo);
             if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
                 //如果没有,默认给一年级

+ 9 - 21
app/src/main/java/com/edufound/reader/presenter/MyTabFragmentPresenter.java

@@ -7,7 +7,6 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
@@ -28,6 +27,7 @@ import com.edufound.reader.bean.MyInfoBean;
 import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.contract.MyTabFragmentContract;
 import com.edufound.reader.cusview.CusToast;
+import com.edufound.reader.interfaces.EfunboxInterfaces;
 import com.edufound.reader.listener.PopUtilClickListener;
 import com.edufound.reader.model.CharacterFragmentModel;
 import com.edufound.reader.model.MyTabFragmentModel;
@@ -346,24 +346,16 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
     @Override
     public void getAuth() {
-        mOrderApi.getAuth(mView.getActivity(), new Callback() {
-            @Override
-            public void onSuccess(HttpInfo info) throws IOException {
-                HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
-                }.getType());
-                if (!TextUtils.isEmpty(bean.getData())) {
-                    Consts.setIsYFVip(true);
-                    mView.getIsBuySuccess(TimeUtil.timeStamp2Date(Long.valueOf(bean.getData()), "yyyy-MM-dd"));
-                } else {
-                    Consts.setIsYFVip(false);
-
-                }
+        EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
 
+            @Override
+            public void success(long time) {
+                mView.getIsBuySuccess(TimeUtil.timeStamp2Date(time, "yyyy-MM-dd"));
             }
 
             @Override
-            public void onFailure(HttpInfo info) throws IOException {
-                getAuth();
+            public void error() {
+
             }
         });
     }
@@ -427,7 +419,7 @@ public class MyTabFragmentPresenter extends BasePresenter<MyTabFragmentContract.
 
     @Override
     public void fragmentResume() {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             if (Consts.getmConstsBaiDuUserBean() == null) {
                 return;
             }
@@ -435,11 +427,7 @@ 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())
-                || Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())
-                || Consts.getUmengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode())
-        ) {
+        } else {
             getAuth();
         }
     }

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

@@ -107,9 +107,18 @@ public class OthersRecordPresenter extends BasePresenter<OthersRecordContract.Vi
             bundle.putString("dataJson", "getmmkv");
             bundle.putString("intoPage", "OthersRecord");
             //数据太多了。直接传不过去,通过MMKV写一下再读一下
-            MMKVUtil.getInstance().encode("video_data", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
+            try {
+                System.gc();
+                MMKVUtil.getInstance().removeKey("video_data");
+                String json = ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList);
+                MMKVUtil.getInstance().encode("video_data", json);
 //            bundle.putString("dataJson", ((BaseActivity) mView.getActivity()).getGson().toJson(mDataList));
-            ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
+                ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class, bundle);
+            } catch (Exception e) {
+                Logger.e("报错数据:" + mDataList);
+                e.printStackTrace();
+
+            }
 
         });
 

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

@@ -51,7 +51,7 @@ public class PayPresenter extends BasePresenter<PayContract.View> implements Pay
 
     @Override
     public void getProductInfo() {
-        mOrderApi.getProductListInfo(mView.getActivity(), Consts.getUmengChannel(), new Callback() {
+        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>>>() {
@@ -138,14 +138,14 @@ public class PayPresenter extends BasePresenter<PayContract.View> implements Pay
             ((PayItemHolder) view.getTag()).mIsCheck.setVisibility(View.VISIBLE);
 
             Map<String, String> createOrderMap = new HashMap<>();
-            createOrderMap.put("channel", Consts.getUmengChannel());
+            createOrderMap.put("channel", Consts.getUMengChannel());
             createOrderMap.put("deviceID", DeviceUuidFactory.getUuid());
             createOrderMap.put("first", "false");
             createOrderMap.put("payType", mPayResult.get(position).getPayType());
             createOrderMap.put("productId", mPayResult.get(position).getId());
             createOrderMap.put("uid", Consts.getUID());
 
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode())) {
+            if (Consts.getUMengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode())) {
                 //创建联想订单
                 Logger.e("创建联想订单");
                 mOrderApi.createdOrderByLianXiang(mView.getActivity(), new Gson().toJson(createOrderMap), new Callback() {

+ 7 - 7
app/src/main/java/com/edufound/reader/presenter/PopWindowPresneter.java

@@ -38,7 +38,7 @@ import com.edufound.reader.bean.UserEventEnum;
 import com.edufound.reader.bean.UserRecordBean;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.listener.PopupRecordStatusListener;
-import com.edufound.reader.miutil.MiSoundSDKUtil;
+import com.edufound.reader.util.miutil.MiSoundSDKUtil;
 import com.edufound.reader.model.PopWindowModelImpl;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.util.Consts;
@@ -679,12 +679,12 @@ public class PopWindowPresneter {
                                             } catch (Exception e) {
                                                 e.printStackTrace();
                                             } finally {
-                                                if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) ||
-                                                        Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode()) ||
-                                                        Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode()) ||
-                                                        Consts.getUmengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode()) ||
-                                                        Consts.getUmengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode()) ||
-                                                        Consts.getUmengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode())
+                                                if (Consts.getUMengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) ||
+                                                        Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode()) ||
+                                                        Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode()) ||
+                                                        Consts.getUMengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode()) ||
+                                                        Consts.getUMengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode()) ||
+                                                        Consts.getUMengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode())
                                                 ) {
                                                     //义方渠道检查权限
                                                     if (Consts.getmConstsUserBean() != null) {

+ 84 - 19
app/src/main/java/com/edufound/reader/presenter/RecommendFragmentPresenter.java

@@ -1,16 +1,20 @@
 package com.edufound.reader.presenter;
 
+import static cn.jzvd.Jzvd.STATE_PLAYING;
+
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Outline;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewOutlineProvider;
 import android.widget.LinearLayout;
 import android.widget.Switch;
-import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.OrientationHelper;
 import androidx.recyclerview.widget.RecyclerView;
@@ -53,7 +57,6 @@ import java.util.List;
 import java.util.Map;
 
 import cn.jzvd.Jzvd;
-import cn.jzvd.JzvdStd;
 
 
 public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentContract.View> implements RecommendFragmentContract.Presenter {
@@ -71,6 +74,8 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
     UserApiServerImpl mUserApi;
     Switch onPlayingSwitch;
     LinearLayout onPlayingMarqueen;
+    boolean isFragmentPause = false;
+
 
     public RecommendFragmentPresenter(Context context) {
         mModel = new RecommendFragmentModel();
@@ -157,7 +162,7 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
             public void onInitComplete() {
                 //自动播放第一条
                 autoPlayVideo(rv);
-                fragmentResume(rv);
+//                fragmentResume(rv);
             }
 
             @Override
@@ -227,30 +232,21 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
     @Override
     public void fragmentPause(RecyclerView rv) {
 //        Jzvd.releaseAllVideos();
-        JzvdStd.goOnPlayOnPause();
-
+        isFragmentPause = true;
+        handler.sendEmptyMessageDelayed(0x3311, 100);
+//        JzvdStd.goOnPlayOnPause();
     }
 
     @Override
     public void fragmentResume(RecyclerView rv) {
+        isFragmentPause = false;
         checkIsVip();
-        mView.getRootView().postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                if (rv.getChildCount() > 0) {
-                    RvListJzvdStd player = rv.getChildAt(0).findViewById(R.id.slidevideo_video);
-                    if (player == null) {
-                        Logger.e("竟然是空的");
-                    }
-                    player.startVideoAfterPreloading();
-                }
-            }
-        }, 800);
+        handler.sendEmptyMessageDelayed(0x3312, 500);
     }
 
 
     public void checkIsVip() {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             if (Consts.getmConstsBaiDuUserBean() != null) {
                 mView.getisViewUI().setVisibility(View.INVISIBLE);
             }
@@ -402,6 +398,11 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
         mView.clearRecyclerView();
         mDataList = null;
         mAdapter = null;
+        if (handler != null) {
+            handler.removeMessages(0x3311);
+            handler.removeMessages(0x3312);
+            handler = null;
+        }
         Jzvd.releaseAllVideos();
         Jzvd.backPress();
     }
@@ -536,7 +537,7 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
         onPlayingSwitch = rv.getChildAt(0).findViewById(R.id.slidevideo_video_switch);
         onPlayingMarqueen = rv.getChildAt(0).findViewById(R.id.slidevideo_video_marqueen);
         if (player != null) {
-            if (player.state == Jzvd.STATE_PLAYING) {
+            if (player.state == STATE_PLAYING) {
                 //正在播放
 
             } else {
@@ -564,6 +565,12 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
                     public void onInfo(int what, int extra) {
 
                     }
+
+                    @Override
+                    public void onPrepared() {
+                        handler.sendEmptyMessageDelayed(0x3311, 100);
+
+                    }
                 });
             }
 
@@ -625,4 +632,62 @@ public class RecommendFragmentPresenter extends BasePresenter<RecommendFragmentC
     }
 
 
+    Handler handler = new Handler(new Handler.Callback() {
+        @Override
+        public boolean handleMessage(@NonNull Message msg) {
+            switch (msg.what) {
+                case 0x3311:
+                    handler.removeMessages(0x3311);
+                    if (isFragmentPause) {
+                        if (mView != null && mView.getmRecyclerView() != null) {
+                            if (mView.getmRecyclerView().getChildCount() > 0) {
+                                RvListJzvdStd player = mView.getmRecyclerView().getChildAt(0).findViewById(R.id.slidevideo_video);
+                                if (player == null) {
+                                    Logger.e("竟然是空的");
+                                    return true;
+                                }
+                                if (isFragmentPause) {
+                                    player.reset();
+                                    Jzvd.releaseAllVideos();
+                                }
+
+//                            Jzvd.goOnPlayOnPause();
+                            }
+                        }
+
+                    }
+                    break;
+                case 0x3312:
+                    handler.removeMessages(0x3312);
+                    if (mView != null && mView.getmRecyclerView() != null) {
+                        if (mView.getmRecyclerView().getChildCount() > 0) {
+                            RvListJzvdStd player = mView.getmRecyclerView().getChildAt(0).findViewById(R.id.slidevideo_video);
+                            if (player == null) {
+                                Logger.e("竟然是空的");
+                                return true;
+                            }
+                            player.startButton.postDelayed(new Runnable() {
+                                @Override
+                                public void run() {
+                                    if (player.state == STATE_PLAYING) {
+
+                                    } else {
+                                        player.startButton.performClick();
+                                    }
+                                }
+                            }, 300);
+
+                        }
+
+//                        player.startVideoAfterPreloading();
+//                        player.onPrepared();
+//                        Jzvd.goOnPlayOnResume();
+                        break;
+                    }
+            }
+            return true;
+        }
+    });
+
+
 }

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

@@ -6,7 +6,6 @@ import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
-import android.util.Log;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.Toast;
@@ -84,6 +83,11 @@ public class RecordPresenter extends BasePresenter<RecordContract.View> implemen
             public void onInfo(int what, int extra) {
                 onVideoInfoListener(what, extra);
             }
+
+            @Override
+            public void onPrepared() {
+
+            }
         });
     }
 
@@ -98,7 +102,7 @@ public class RecordPresenter extends BasePresenter<RecordContract.View> implemen
                 mReadId = bundle.getString("exampleId");
             }
         }
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             BotRegisterListener.uploadUsage("1", mReadId, "record", "vip");
         }
         mModel.getReadInfo(mView.getActivity(), mReadId, new Callback() {

+ 128 - 15
app/src/main/java/com/edufound/reader/presenter/SplashPresenter.java

@@ -1,12 +1,15 @@
 package com.edufound.reader.presenter;
 
+import static com.huawei.updatesdk.service.otaupdate.UpdateStatusCode.CHECK_FAILED;
+import static com.huawei.updatesdk.service.otaupdate.UpdateStatusCode.NO_UPGRADE_INFO;
+
+import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
 import android.net.Uri;
 import android.text.Spannable;
 import android.text.SpannableStringBuilder;
 import android.text.TextPaint;
-import android.text.TextUtils;
 import android.text.method.LinkMovementMethod;
 import android.text.style.ClickableSpan;
 import android.view.View;
@@ -21,47 +24,55 @@ import com.edufound.reader.activity.WebActivity;
 import com.edufound.reader.apiserver.ActivityEventServerImpl;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.apiserver.UserApiServerImpl;
+import com.edufound.reader.application.EApplication;
 import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
-import com.edufound.reader.bean.ActivityEventBean;
 import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
-import com.edufound.reader.bean.SignBean;
 import com.edufound.reader.bean.ThroughType;
 import com.edufound.reader.bean.ThroughTypeBean;
 import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.SplashContract;
 import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.interfaces.EfunboxInterfaces;
-import com.edufound.reader.listener.PopUtilClickListener;
-import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUuidFactory;
 import com.edufound.reader.util.EfunboxUtil;
-import com.edufound.reader.util.MMKVEncodeKey;
-import com.edufound.reader.util.MMKVUtil;
 import com.edufound.reader.util.ThroughUtil;
 import com.google.gson.reflect.TypeToken;
-import com.jakewharton.rxbinding4.view.RxView;
+import com.huawei.hmf.tasks.OnFailureListener;
+import com.huawei.hmf.tasks.OnSuccessListener;
+import com.huawei.hmf.tasks.Task;
+import com.huawei.hms.jos.AppParams;
+import com.huawei.hms.jos.AppUpdateClient;
+import com.huawei.hms.jos.JosApps;
+import com.huawei.hms.jos.JosAppsClient;
+import com.huawei.hms.support.account.request.AccountAuthParams;
+import com.huawei.updatesdk.service.appmgr.bean.ApkUpgradeInfo;
+import com.huawei.updatesdk.service.otaupdate.CheckUpdateCallBack;
+import com.huawei.updatesdk.service.otaupdate.UpdateKey;
 import com.okhttplib.HttpInfo;
 import com.okhttplib.callback.Callback;
 import com.orhanobut.logger.Logger;
+import com.umeng.commonsdk.UMConfigure;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.IOException;
+import java.io.Serializable;
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 
 import io.reactivex.rxjava3.annotations.NonNull;
 
-public class SplashPresenter extends BasePresenter implements SplashContract.Presenter {
+public class SplashPresenter extends BasePresenter<SplashContract.View> implements SplashContract.Presenter {
 
     UserApiServerImpl mUserApi;
     OrderApiServerImpl mOrderApi;
     ActivityEventServerImpl mEventApi;
+    AppUpdateClient mAppUpdateClient;
 
     public SplashPresenter() {
         mUserApi = new UserApiServerImpl();
@@ -73,7 +84,7 @@ public class SplashPresenter extends BasePresenter implements SplashContract.Pre
         Uri getIntentUri = null;
         if (intent != null) {
             //有intent或者scheme
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+            if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
                 //判断是百度渠道
                 if (intent != null && intent.hasExtra(MemberSdkConstants.BOTAPP_OPEN_PARAMS_ACTIVE_INFO)) {
                     String infoData = intent.getStringExtra(MemberSdkConstants.BOTAPP_OPEN_PARAMS_ACTIVE_INFO);
@@ -150,6 +161,8 @@ public class SplashPresenter extends BasePresenter implements SplashContract.Pre
 
 
     public void getUserInfo(Intent intent) {
+        UMConfigure.submitPolicyGrantResult(mView.getActivity(), true);
+        UMConfigure.init(mView.getActivity(), Consts.getUMengAppKey(), Consts.getUMengChannel(), UMConfigure.DEVICE_TYPE_PHONE, "");
         mUserApi.postFirstEnter(new Callback() {
             @Override
             public void onSuccess(HttpInfo info) throws IOException {
@@ -168,7 +181,7 @@ public class SplashPresenter extends BasePresenter implements SplashContract.Pre
                 try {
                     JSONObject object = new JSONObject(info.getRetDetail());
                     if (object.getString("code").equals("300") || object.getInt("code") == 300) {
-                        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())
+                        if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())
                         ) {
                             getScheme(intent);
                         }
@@ -204,15 +217,14 @@ public class SplashPresenter extends BasePresenter implements SplashContract.Pre
 
     private void getYFVip(Intent intent) {
         EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
+
             @Override
-            public void success() {
-                Logger.e("获取是否是义方VIP success");
+            public void success(long time) {
                 getScheme(intent);
             }
 
             @Override
             public void error() {
-                Logger.e("获取是否是义方VIP error");
                 getScheme(intent);
             }
         });
@@ -252,6 +264,43 @@ public class SplashPresenter extends BasePresenter implements SplashContract.Pre
         textView.setHighlightColor(Color.parseColor("#ffffff"));
     }
 
+    @Override
+    public void initHuaWei() {
+        AccountAuthParams params = AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM;
+        JosAppsClient appsClient = JosApps.getJosAppsClient(mView.getActivity());
+        final Task<Void> initTask = appsClient.init(new AppParams(params));
+        initTask.addOnSuccessListener(new OnSuccessListener<Void>() {
+            @Override
+            public void onSuccess(Void aVoid) {
+                Logger.e("华为初始化成功");
+                checkHuaWeiUpdate();
+
+            }
+        }).addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                Logger.e("华为初始化失败:" + e.getMessage());
+                CusToast.getInstance(mView.getActivity()).show("华为初始化失败", 3000);
+            }
+        });
+    }
+
+
+    @Override
+    public void checkHuaWeiUpdate() {
+        mAppUpdateClient = JosApps.getAppUpdateClient(mView.getActivity());
+        mAppUpdateClient.checkAppUpdate(mView.getActivity(), new HuaWeiUpdateCallBack(mView.getActivity(), mView));
+
+    }
+
+    @Override
+    public void onDestroy() {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+            mAppUpdateClient.releaseCallBack();
+        }
+
+    }
+
 
     private List<Integer> getChildIndexFromString(String parent, String child) {
         int startIndex = 0;
@@ -281,4 +330,68 @@ public class SplashPresenter extends BasePresenter implements SplashContract.Pre
         mView.getActivity().startActivity(intent);
     }
 
+    private static class HuaWeiUpdateCallBack implements CheckUpdateCallBack {
+        private WeakReference<Context> mContextWeakReference;
+        SplashContract.View mView;
+
+        public HuaWeiUpdateCallBack(Context context, SplashContract.View view) {
+            mContextWeakReference = new WeakReference<>(context);
+            mView = view;
+        }
+
+        @Override
+        public void onUpdateInfo(Intent intent) {
+            if (intent != null) {
+                // 更新状态信息
+                int status = intent.getIntExtra(UpdateKey.STATUS, -99);
+                if (status == NO_UPGRADE_INFO || status == CHECK_FAILED) {
+                    //没有更新信息
+                    Logger.e("没有查询到更新信息或者是检查失败了:status=" + status);
+                    mView.toMainActivity();
+                    return;
+                }
+                Logger.e("check update status is:" + status);
+                // 返回错误码
+                int rtnCode = intent.getIntExtra(UpdateKey.FAIL_CODE, -99);
+                // 返回失败信息
+                String rtnMessage = intent.getStringExtra(UpdateKey.FAIL_REASON);
+                // 强制更新应用时,弹出对话框后用户是否点击“退出应用”按钮
+                boolean isExit = intent.getBooleanExtra(UpdateKey.MUST_UPDATE, false);
+                Logger.e("rtnCode = " + rtnCode + "rtnMessage = " + rtnMessage);
+
+                Serializable info = intent.getSerializableExtra(UpdateKey.INFO);
+                // 如果info属于ApkUpgradeInfo类型,则拉起更新弹框
+                if (info instanceof ApkUpgradeInfo) {
+                    Context context = mContextWeakReference.get();
+                    if (context != null) {
+                        // showUpdateDialog接口中最后一个字段传入不同取值会带来不同的用户体验,具体请参考本文档的场景描述,
+                        //true 强制更新
+                        JosApps.getAppUpdateClient(context).showUpdateDialog(context, (ApkUpgradeInfo) info, true);
+                    }
+                    Logger.e("check update success and there is a new update");
+                }
+                Logger.e("check update isExit=" + isExit);
+                if (isExit) {
+                    // 是强制更新应用,用户在弹出的升级提示框中选择了“退出应用”,处理逻辑由您自行控制,这里只是个例子
+                    EApplication.killAppProcess(mContextWeakReference.get());
+
+                }
+            }
+        }
+
+        @Override
+        public void onMarketInstallInfo(Intent intent) {
+
+        }
+
+        @Override
+        public void onMarketStoreError(int i) {
+
+        }
+
+        @Override
+        public void onUpdateStoreError(int i) {
+
+        }
+    }
 }

+ 6 - 13
app/src/main/java/com/edufound/reader/presenter/TmailPayPresenter.java

@@ -3,7 +3,6 @@ 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;
@@ -16,10 +15,8 @@ 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.activity.TmailPayActivity;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.base.BaseActivity;
 import com.edufound.reader.base.BasePresenter;
@@ -27,16 +24,12 @@ import com.edufound.reader.bean.ChannelCodeEnum;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.PayResultBean;
 import com.edufound.reader.contract.TmailPayContract;
-import com.edufound.reader.miutil.MiSoundSDKUtil;
-import com.edufound.reader.model.PayModel;
+import com.edufound.reader.util.miutil.MiSoundSDKUtil;
 import com.edufound.reader.model.TmailPayModel;
-import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUtil;
 import com.edufound.reader.util.DeviceUuidFactory;
-import com.edufound.reader.util.GlideUtils;
-import com.edufound.reader.util.QRCodeUtil;
-import com.edufound.reader.util.SizeUtils;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.okhttplib.HttpInfo;
@@ -65,7 +58,7 @@ public class TmailPayPresenter extends BasePresenter<TmailPayContract.View> impl
 
     @Override
     public void getProductInfo() {
-        mOrderApi.getProductListInfo(mView.getActivity(), Consts.getUmengChannel(), new Callback() {
+        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>>>() {
@@ -166,11 +159,11 @@ public class TmailPayPresenter extends BasePresenter<TmailPayContract.View> impl
             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("channel", Consts.getUMengChannel());
             params.put("payType", mPayResult.get(position).getPayType());
             params.put("uid", Consts.getmConstsUserBean().getUid());
             params.put("first", "false");
-            if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+            if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
                 //去天猫支付
                 mModel.TMailPayGenie(mView.getActivity(), ((BaseActivity) mView.getActivity()).getGson().toJson(params), new Callback() {
                     @Override
@@ -195,7 +188,7 @@ public class TmailPayPresenter extends BasePresenter<TmailPayContract.View> impl
                         Toast.makeText(mView.getActivity(), "创建订单失败", Toast.LENGTH_SHORT).show();
                     }
                 });
-            } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+            } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
                 //小米支付
                 //获取shortkey
                 Logger.e("小米支付");

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

@@ -11,7 +11,6 @@ import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.bean.MyInfoBean;
 import com.edufound.reader.bean.UserBean;
 import com.edufound.reader.contract.UserInfoSettingContract;
-import com.edufound.reader.cusview.CusToast;
 import com.edufound.reader.model.UserInfoSettingModel;
 import com.edufound.reader.receiver.BackPageReceiver;
 import com.edufound.reader.util.Consts;
@@ -134,7 +133,7 @@ public class UserInfoSettingPresenter extends BasePresenter<UserInfoSettingContr
         if (EfunboxUtil.isMobileNO(phone)) {
             Map<String, String> map = new HashMap<>();
             map.put("deviceCode", DeviceUuidFactory.getUuid());
-            map.put("channel", Consts.getUmengChannel());
+            map.put("channel", Consts.getUMengChannel());
             map.put("mobileNo", phone);
             if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
                 //如果没有,默认给一年级

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

@@ -24,7 +24,7 @@ import com.edufound.reader.contract.WebContract;
 import com.edufound.reader.jsinterfaces.WebActivityJsInterfaces;
 import com.edufound.reader.model.PayModel;
 import com.edufound.reader.receiver.ShowPageLoadingReceiver;
-import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
 import com.edufound.reader.util.Consts;
 import com.edufound.reader.util.DeviceUtil;
 import com.google.gson.Gson;

+ 13 - 4
app/src/main/java/com/edufound/reader/util/Consts.java

@@ -4,10 +4,8 @@ import android.app.Application;
 
 import com.edufound.reader.bean.BaiDuUserInfo;
 import com.edufound.reader.bean.UserBean;
-import com.orhanobut.logger.Logger;
 
 import java.io.File;
-import java.util.Map;
 
 public class Consts {
     private static Application mApplicAtion;
@@ -28,6 +26,8 @@ public class Consts {
 
     private static String UMENG_CHANNEL = null;
 
+    private static String UMENG_APPKEY = null;
+
     private static String UID = "";
 
 
@@ -169,14 +169,23 @@ public class Consts {
         return FinalApiUrl;
     }
 
-    public static String getUmengChannel() {
+    public static String getUMengChannel() {
         return UMENG_CHANNEL;
     }
 
-    public static void setUmengChannel(String umengChannel) {
+    public static void setUMengChannel(String umengChannel) {
         UMENG_CHANNEL = umengChannel;
     }
 
+
+    public static String getUMengAppKey() {
+        return UMENG_APPKEY;
+    }
+
+    public static void setUMengAppKey(String appKey) {
+        UMENG_APPKEY = appKey;
+    }
+
     public static BaiDuUserInfo getmConstsBaiDuUserBean() {
         return mConstsBaiDuUserBean;
     }

+ 58 - 34
app/src/main/java/com/edufound/reader/util/EfunboxUtil.java

@@ -7,10 +7,10 @@ import android.text.TextUtils;
 import android.util.DisplayMetrics;
 import android.view.View;
 
-import com.edufound.reader.activity.LoginAlertActivity;
 import com.edufound.reader.activity.LoginQRAlertActivity;
-import com.edufound.reader.activity.PayActivity;
-import com.edufound.reader.activity.TmailPayActivity;
+import com.edufound.reader.activity.payactivity.HuaWeiPayActivity;
+import com.edufound.reader.activity.payactivity.PayActivity;
+import com.edufound.reader.activity.payactivity.TmailPayActivity;
 import com.edufound.reader.activity.WebActivity;
 import com.edufound.reader.apiserver.ActivityEventServerImpl;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
@@ -19,11 +19,12 @@ import com.edufound.reader.bean.EventListBean;
 import com.edufound.reader.bean.HttpResultBean;
 import com.edufound.reader.botsdk.BotRegisterListener;
 import com.edufound.reader.interfaces.EfunboxInterfaces;
-import com.edufound.reader.miutil.MiSoundSDKUtil;
+import com.edufound.reader.util.huaweiutil.HuaWeiUtil;
+import com.edufound.reader.util.miutil.MiSoundSDKUtil;
 import com.edufound.reader.popwindow.PopWindowUtil;
 import com.edufound.reader.presenter.PopWindowPresneter;
 import com.edufound.reader.receiver.ShowPageLoadingReceiver;
-import com.edufound.reader.tmailsdk.TMailSDKUtil;
+import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.okhttplib.HttpInfo;
@@ -99,6 +100,9 @@ public class EfunboxUtil {
 //                PRIMARY_SECOND_GRADE("小学二年级"),
 //                PRIMARY_THREE_GRADE("小学三年级"),
 //                PRIMARY_SENIOR_GRADE("小学四年级");
+        if (TextUtils.isEmpty(cnGrade)) {
+            return "undefinde";
+        }
         switch (cnGrade) {
             case "一年级":
                 return "PRIMARY_FIRST_GRADE";
@@ -115,6 +119,9 @@ public class EfunboxUtil {
     }
 
     public static String getCNGradeByEnum(String gradeEnum) {
+        if (TextUtils.isEmpty(gradeEnum)) {
+            return "undefinde";
+        }
         switch (gradeEnum) {
             case "PRIMARY_FIRST_GRADE":
                 return "一年级";
@@ -131,6 +138,9 @@ public class EfunboxUtil {
     }
 
     public static int getIndexGradeByEnum(String gradeEnum) {
+        if (TextUtils.isEmpty(gradeEnum)) {
+            return -1;
+        }
         switch (gradeEnum) {
             case "PRIMARY_FIRST_GRADE":
                 return 0;
@@ -147,7 +157,7 @@ public class EfunboxUtil {
     }
 
 
-    public static boolean checkLogin(Context context, View parent) {
+    public static boolean checkLogin(Activity context, View parent) {
         if (!Consts.getUID().equals(Consts.getDefaultUid())) {
             //已登录,无论登不登录都调用登录...
             return true;
@@ -157,8 +167,18 @@ public class EfunboxUtil {
     }
 
 
+    public static boolean checkLogin(Context context, View parent) {
+        if (!Consts.getUID().equals(Consts.getDefaultUid())) {
+            //已登录,无论登不登录都调用登录...
+            return true;
+        }
+        userLogin((Activity) context, parent);
+        return false;
+    }
+
+
     public static boolean checkIsVip() {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             if (Consts.getmConstsBaiDuUserBean() == null || Consts.getmConstsBaiDuUserBean().getUserInfo() == null) {
                 return false;
             }
@@ -169,25 +189,25 @@ public class EfunboxUtil {
         }
     }
 
-    public static void userLogin(Context context, View parent) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+    public static void userLogin(Activity context, View parent) {
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //百度渠道调用百度的授权
             BotRegisterListener.getBaiDuVipInfo();
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             TMailSDKUtil.TMailLogin(context);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
             PopWindowUtil.miSoundLoginWindow(context, parent, MiSoundSDKUtil.MI_SOUND_QRCODE_TYPE, miSoundLoginCallBack);
 
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.XUNFEI.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode())) {
             //京东方、、步步高、义方、联想pad
             Intent intent = new Intent(context, LoginQRAlertActivity.class);
             context.startActivity(intent);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
-
-
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+            HuaWeiUtil.signInCode(context);
         }
     }
 
@@ -203,25 +223,28 @@ public class EfunboxUtil {
 
 
     public static void userPay(Activity activity) {
-        if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        Intent topay = null;
+        if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //百度渠道调用百度的支付
             BotRegisterListener.payBaiDuVip();
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode()) ||
-                Consts.getUmengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.YIFANG.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.JINGDONGFANG.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.XUNFEI.getChannelCode()) ||
+                Consts.getUMengChannel().equals(ChannelCodeEnum.BUBUGAO.getChannelCode())) {
             //义方调用普通版支付,联想也用
-            Intent topay = new Intent(activity, PayActivity.class);
+            topay = new Intent(activity, PayActivity.class);
             activity.startActivity(topay);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
             //去天猫支付界面
-            Intent topay = new Intent(activity, TmailPayActivity.class);
+            topay = new Intent(activity, TmailPayActivity.class);
             activity.startActivity(topay);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
-            Intent topay = new Intent(activity, PayActivity.class);
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
+            topay = new Intent(activity, PayActivity.class);
+            activity.startActivity(topay);
+        } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
+            topay = new Intent(activity, HuaWeiPayActivity.class);
             activity.startActivity(topay);
-        } else if (Consts.getUmengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
-
 
         }
     }
@@ -231,7 +254,7 @@ public class EfunboxUtil {
      */
     public static void getYFVip(Context context, EfunboxInterfaces.getYFVipInterfaces callback) {
 
-        if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
+        if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
             //不是百度渠道,检查是否是义方VIP
             if (Consts.getmConstsUserBean() != null) {
                 OrderApiServerImpl api = new OrderApiServerImpl();
@@ -240,10 +263,12 @@ public class EfunboxUtil {
                     public void onSuccess(HttpInfo info) throws IOException {
                         HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
                         }.getType());
+
                         if (!TextUtils.isEmpty(bean.getData())) {
                             Consts.setIsYFVip(true);
                             if (callback != null) {
-                                callback.success();
+                                callback.success(Long.valueOf(bean.getData()));
+                                Logger.e("义方VIP时间:" + Long.valueOf(bean.getData()));
                             }
                         } else {
                             Consts.setIsYFVip(false);
@@ -350,7 +375,6 @@ public class EfunboxUtil {
                 } catch (Exception e) {
                     e.printStackTrace();
                 } finally {
-                    Logger.e("发送了设置index的广播");
                     Intent intent = new Intent("com.edufound.reader.main.setindex");
                     context.sendBroadcast(intent);
                 }
@@ -374,7 +398,7 @@ public class EfunboxUtil {
         intent.putExtra("loadUrl", url);
         Map<String, String> map = new HashMap<>();
         map.put("uid", Consts.getUID());
-        map.put("channelCode", Consts.getUmengChannel());
+        map.put("channelCode", Consts.getUMengChannel());
         map.put("versionCode", DeviceUtil.getVersionCode(context));
         if (activityId != null) {
             map.put("activityId", activityId);

+ 6 - 2
app/src/main/java/com/edufound/reader/util/GlideUtils.java

@@ -110,7 +110,7 @@ public class GlideUtils {
                 .placeholder(placeholderImage) //占位图
                 .error(errorImage)             //错误图
                 .format(PREFER_RGB_565)
-                .skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE);          //禁用掉Glide的内存缓存功能
+                .skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);
         Glide.with(context).load(url).apply(options).into(imageView);
 
     }
@@ -121,7 +121,7 @@ public class GlideUtils {
                 .placeholder(placeholderImage) //占位图
                 .error(errorImage)             //错误图
                 .format(PREFER_RGB_565)
-                .skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE);          //禁用掉Glide的内存缓存功能
+                .skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);          //禁用掉Glide的内存缓存功能
         Glide.with(context).load(id).apply(options).into(imageView);
 
     }
@@ -362,4 +362,8 @@ public class GlideUtils {
                 .load(url)
                 .addListener(requestListener).preload();
     }
+
+    public static void removeAll(Context context) {
+        Glide.get(context).clearDiskCache();
+    }
 }

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

@@ -57,7 +57,7 @@ public class OkHttpClient {
         }
         mHeaders.clear();
         mHeaders.put("uid", Consts.getUID());
-        mHeaders.put("channelCode", Consts.getUmengChannel());
+        mHeaders.put("channelCode", Consts.getUMengChannel());
     }
 
 

+ 114 - 0
app/src/main/java/com/edufound/reader/util/huaweiutil/HuaWeiUtil.java

@@ -0,0 +1,114 @@
+package com.edufound.reader.util.huaweiutil;
+
+import android.app.Activity;
+
+import com.huawei.hmf.tasks.OnFailureListener;
+import com.huawei.hmf.tasks.OnSuccessListener;
+import com.huawei.hmf.tasks.Task;
+import com.huawei.hms.common.ApiException;
+import com.huawei.hms.support.account.AccountAuthManager;
+import com.huawei.hms.support.account.request.AccountAuthParams;
+import com.huawei.hms.support.account.request.AccountAuthParamsHelper;
+import com.huawei.hms.support.account.result.AuthAccount;
+import com.huawei.hms.support.account.service.AccountAuthService;
+import com.orhanobut.logger.Logger;
+
+public class HuaWeiUtil {
+
+
+    //login
+    public static final int REQUEST_SIGN_IN_LOGIN = 1002;
+    //login by code
+    public static final int REQUEST_SIGN_IN_LOGIN_CODE = 1003;
+
+    private static AccountAuthService mAuthManager;
+    private static AccountAuthParams mAuthParam;
+
+    /**
+     * Codelab Code
+     * Pull up the authorization interface by getSignInIntent
+     */
+    public static void signIn(Activity activity) {
+        mAuthParam = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
+                .setIdToken()
+                .setAccessToken()
+                .createParams();
+        mAuthManager = AccountAuthManager.getService(activity, mAuthParam);
+        activity.startActivityForResult(mAuthManager.getSignInIntent(), REQUEST_SIGN_IN_LOGIN);
+    }
+
+    public static void signInCode(Activity activity) {
+        mAuthParam = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
+                .setProfile()
+                .setAuthorizationCode()
+                .createParams();
+        mAuthManager = AccountAuthManager.getService(activity, mAuthParam);
+        activity.startActivityForResult(mAuthManager.getSignInIntent(), REQUEST_SIGN_IN_LOGIN_CODE);
+    }
+
+    /**
+     * Codelab Code
+     * sign Out by signOut
+     */
+    public static void signOut() {
+        Task<Void> signOutTask = mAuthManager.signOut();
+        signOutTask.addOnSuccessListener(new OnSuccessListener<Void>() {
+            @Override
+            public void onSuccess(Void aVoid) {
+                Logger.e("华为 signOut Success");
+            }
+        }).addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                Logger.e("华为 signOut fail");
+            }
+        });
+    }
+
+    /**
+     * Codelab Code
+     * Silent SignIn by silentSignIn
+     */
+    public static void silentSignIn(Activity activity) {
+        Task<AuthAccount> task = mAuthManager.silentSignIn();
+        task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
+            @Override
+            public void onSuccess(AuthAccount authAccount) {
+                Logger.e("华为 silentSignIn Success");
+            }
+        });
+        task.addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                //if Failed use getSignInIntent
+                if (e instanceof ApiException) {
+                    ApiException apiException = (ApiException) e;
+                    signIn(activity);
+                }
+            }
+        });
+    }
+
+    public static void cancelAuthorization(Activity activity) {
+        mAuthParam = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
+                .setProfile()
+                .setAuthorizationCode()
+                .createParams();
+        mAuthManager = AccountAuthManager.getService(activity, mAuthParam);
+        Task<Void> task = mAuthManager.cancelAuthorization();
+        task.addOnSuccessListener(new OnSuccessListener<Void>() {
+            @Override
+            public void onSuccess(Void aVoid) {
+                Logger.e("华为 cancelAuthorization Success");
+            }
+        });
+        task.addOnFailureListener(new OnFailureListener() {
+            @Override
+            public void onFailure(Exception e) {
+                Logger.e("华为 cancelAuthorization failure" + e.getClass().getSimpleName());
+
+            }
+        });
+    }
+
+}

+ 36 - 0
app/src/main/java/com/edufound/reader/util/miutil/MiSoundSDKUtil.java

@@ -0,0 +1,36 @@
+package com.edufound.reader.util.miutil;
+
+import com.google.gson.Gson;
+import com.orhanobut.logger.Logger;
+import com.xiaomi.mitv.client.MitvClient;
+import com.xiaomi.mitv.entity.OrderInfoParam;
+import com.xiaomi.mitv.exception.MitvCommonException;
+
+import java.io.UnsupportedEncodingException;
+
+public class MiSoundSDKUtil {
+    private static Gson mGson;
+    public static final int MI_SOUND_QRCODE_TYPE = 0x19181;
+    public static final int MI_SOUND_QRCODE_UPDATE_USER=0x19184;
+    public static final int MI_SOUND_BIND_PHONENUM = 0x19182;
+    public static final int MI_SOUND_SHOW_BINDPHONENUM = 0x19183;
+
+    public static String getShortKey(String json) {
+        Logger.e("json:" + json);
+        if (mGson == null) {
+            mGson = new Gson();
+        }
+        OrderInfoParam orderInfoParam = mGson.fromJson(json, OrderInfoParam.class);
+//        orderInfoParam.setTrxAmount(1l);
+        String result = null;
+        try {
+            result = MitvClient.createShortkey(orderInfoParam, 0, 0, false);
+        } catch (MitvCommonException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        Logger.e("result:" + result);
+        return result;
+    }
+}

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

@@ -1,4 +1,4 @@
-package com.edufound.reader.tmailsdk;
+package com.edufound.reader.util.tmailsdk;
 
 public class TMailConstants {
     public static String appSecret = "bd223dca-3253-4582-83af-9bc63450723f";

+ 1 - 5
app/src/main/java/com/edufound/reader/tmailsdk/TMailSDKUtil.java

@@ -1,4 +1,4 @@
-package com.edufound.reader.tmailsdk;
+package com.edufound.reader.util.tmailsdk;
 
 import android.app.Activity;
 import android.content.Context;
@@ -17,20 +17,16 @@ import com.alibaba.genie.waft.gcs.rpc.GenieServiceLoader;
 import com.edufound.reader.activity.LoginAlertActivity;
 import com.edufound.reader.apiserver.OrderApiServerImpl;
 import com.edufound.reader.apiserver.UserApiServerImpl;
-import com.edufound.reader.base.BaseActivity;
 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.EfunboxUtil;
 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;
 

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


+ 27 - 20
app/src/main/res/layout/toast.xml

@@ -1,27 +1,34 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center"
+    android:background="@color/transparent"
+    android:gravity="center">
+
+    <FrameLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:gravity="center">
+        android:background="@color/transparent"
+        android:gravity="center"
+        android:orientation="horizontal">
 
-    <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:background="@drawable/toast_bg"
-            android:gravity="center"
-            android:orientation="horizontal"
-            android:padding="30dp">
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/toast_bg"></ImageView>
 
         <TextView
-                android:id="@+id/tvToast"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:gravity="center"
-                android:lineSpacingMultiplier="1.6"
-                android:text="222222222222222\n2222"
-                android:textColor="#AB722D"
-                android:textSize="27dp" />
-    </LinearLayout>
+            android:id="@+id/tvToast"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@color/transparent"
+            android:gravity="center"
+            android:lineSpacingMultiplier="1.6"
+            android:padding="30dp"
+            android:text="2222222222222222222222222222222222222\n2\n2\n2\n22"
+            android:textColor="#AB722D"
+            android:textSize="27dp" />
+    </FrameLayout>
 </LinearLayout>

+ 3 - 0
build.gradle

@@ -4,9 +4,11 @@ buildscript {
         google()
         jcenter()
         maven { url 'https://repo1.maven.org/maven2/' }
+        maven {url 'https://developer.huawei.com/repo/'}
     }
     dependencies {
         classpath "com.android.tools.build:gradle:4.1.3"
+        classpath 'com.huawei.agconnect:agcp:1.6.0.300'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
@@ -22,6 +24,7 @@ allprojects {
         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://developer.huawei.com/repo/'}
     }
 }
 

+ 1 - 1
gradle.properties

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