SplashPresenter.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. package com.edufound.reader.presenter;
  2. import static com.huawei.updatesdk.service.otaupdate.UpdateStatusCode.CHECK_FAILED;
  3. import static com.huawei.updatesdk.service.otaupdate.UpdateStatusCode.NO_UPGRADE_INFO;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.graphics.Color;
  7. import android.net.Uri;
  8. import android.text.Spannable;
  9. import android.text.SpannableStringBuilder;
  10. import android.text.TextPaint;
  11. import android.text.method.LinkMovementMethod;
  12. import android.text.style.ClickableSpan;
  13. import android.view.View;
  14. import android.widget.TextView;
  15. import com.baidu.duer.membersdk.MemberSdkManager;
  16. import com.baidu.duer.membersdk.constant.MemberSdkConstants;
  17. import com.edufound.reader.activity.MainActivity;
  18. import com.edufound.reader.activity.RecordActivity;
  19. import com.edufound.reader.activity.SmallFullVideoActivity;
  20. import com.edufound.reader.activity.WebActivity;
  21. import com.edufound.reader.apiserver.ActivityEventServerImpl;
  22. import com.edufound.reader.apiserver.OrderApiServerImpl;
  23. import com.edufound.reader.apiserver.UserApiServerImpl;
  24. import com.edufound.reader.application.EApplication;
  25. import com.edufound.reader.base.BaseActivity;
  26. import com.edufound.reader.base.BasePresenter;
  27. import com.edufound.reader.bean.ChannelCodeEnum;
  28. import com.edufound.reader.bean.HttpResultBean;
  29. import com.edufound.reader.bean.ThroughType;
  30. import com.edufound.reader.bean.ThroughTypeBean;
  31. import com.edufound.reader.bean.UserBean;
  32. import com.edufound.reader.contract.SplashContract;
  33. import com.edufound.reader.cusview.CusToast;
  34. import com.edufound.reader.interfaces.EfunboxInterfaces;
  35. import com.edufound.reader.util.Consts;
  36. import com.edufound.reader.util.DeviceUuidFactory;
  37. import com.edufound.reader.util.EfunboxUtil;
  38. import com.edufound.reader.util.ThroughUtil;
  39. import com.google.gson.reflect.TypeToken;
  40. import com.huawei.hmf.tasks.OnFailureListener;
  41. import com.huawei.hmf.tasks.OnSuccessListener;
  42. import com.huawei.hmf.tasks.Task;
  43. import com.huawei.hms.jos.AppParams;
  44. import com.huawei.hms.jos.AppUpdateClient;
  45. import com.huawei.hms.jos.JosApps;
  46. import com.huawei.hms.jos.JosAppsClient;
  47. import com.huawei.hms.support.account.request.AccountAuthParams;
  48. import com.huawei.updatesdk.service.appmgr.bean.ApkUpgradeInfo;
  49. import com.huawei.updatesdk.service.otaupdate.CheckUpdateCallBack;
  50. import com.huawei.updatesdk.service.otaupdate.UpdateKey;
  51. import com.okhttplib.HttpInfo;
  52. import com.okhttplib.callback.Callback;
  53. import com.orhanobut.logger.Logger;
  54. import com.umeng.commonsdk.UMConfigure;
  55. import org.json.JSONException;
  56. import org.json.JSONObject;
  57. import java.io.IOException;
  58. import java.io.Serializable;
  59. import java.lang.ref.WeakReference;
  60. import java.util.ArrayList;
  61. import java.util.List;
  62. import io.reactivex.rxjava3.annotations.NonNull;
  63. public class SplashPresenter extends BasePresenter<SplashContract.View> implements SplashContract.Presenter {
  64. UserApiServerImpl mUserApi;
  65. OrderApiServerImpl mOrderApi;
  66. ActivityEventServerImpl mEventApi;
  67. AppUpdateClient mAppUpdateClient;
  68. public SplashPresenter() {
  69. mUserApi = new UserApiServerImpl();
  70. mOrderApi = new OrderApiServerImpl();
  71. mEventApi = new ActivityEventServerImpl();
  72. }
  73. private void getScheme(Intent intent) {
  74. Uri getIntentUri = null;
  75. if (intent != null) {
  76. //有intent或者scheme
  77. if (Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
  78. //判断是百度渠道
  79. if (intent != null && intent.hasExtra(MemberSdkConstants.BOTAPP_OPEN_PARAMS_ACTIVE_INFO)) {
  80. String infoData = intent.getStringExtra(MemberSdkConstants.BOTAPP_OPEN_PARAMS_ACTIVE_INFO);
  81. MemberSdkManager.getInstance().setShowParameter(infoData);
  82. }
  83. if (intent.getStringExtra("url") != null && !intent.getStringExtra("url").equals("")) {
  84. getIntentUri = Uri.parse(intent.getStringExtra("url"));
  85. }
  86. //efunbox://com.edufound.reader/splash?resid=11132
  87. } else {
  88. //除了百度都走这里
  89. getIntentUri = intent.getData();
  90. }
  91. }
  92. //efunbox://com.edufound.reader/splash?exampleId=103126003&backModel=home&type=typeA (直接去朗读页面参数)
  93. //efunbox://com.edufound.reader/splash?userReadId=1610706272358766&backModel=home&type=typeB (根据id把视频提前)
  94. //efunbox://com.edufound.reader/splash?userReadId=1610706272358766&backModel=home&type=typeC (根据id把视频提前)
  95. // getIntentUri = Uri.parse("efunbox://com.edufound.reader/splash?exampleId=103126003&backModel=home&type=typeA");
  96. //判断获取的uri是不是空的
  97. if (getIntentUri != null) {
  98. String type = getIntentUri.getQueryParameter("type");
  99. if (getIntentUri.getQueryParameter("type") != null) {
  100. ThroughUtil.mThroughTypeBean = new ThroughTypeBean();
  101. if (type.equals(ThroughType.TYPEA.getTypeCode())) {
  102. //typeA类型,直接进入朗读界面
  103. Logger.e("进入了TypeA类型");
  104. ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPEA.getTypeCode());
  105. ThroughUtil.mThroughTypeBean.setExampleId(getIntentUri.getQueryParameter("exampleId"));
  106. //backModel只有app和home两个值,app是直接退出应用,home是返回首页
  107. ThroughUtil.mThroughTypeBean.setBackModel(getIntentUri.getQueryParameter("backModel"));
  108. Logger.e("getIntentUri.getQueryParameter(\"exampleId\"):" + getIntentUri.getQueryParameter("exampleId"));
  109. Logger.e("getIntentUri.getQueryParameter(\"backModel\"):" + getIntentUri.getQueryParameter("backModel"));
  110. //暂时还没处理defaultIndex
  111. // String defaultIndex = getIntentUri.getQueryParameter("backDefaultIndex");
  112. // if (!TextUtils.isEmpty(defaultIndex)) {
  113. // ThroughUtil.mThroughTypeBean.setBackDefaultIndex(getIntentUri.getQueryParameter("backDefaultIndex"));
  114. // } else {
  115. // ThroughUtil.mThroughTypeBean.setBackDefaultIndex("0");
  116. // }
  117. ((BaseActivity) mView.getActivity()).toNextActivity(RecordActivity.class);
  118. } else if (type.equals(ThroughType.TYPEB.getTypeCode())) {
  119. Logger.e("进入了TypeB类型");
  120. //把收到的ID视频提到第一个
  121. ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPEB.getTypeCode());
  122. ThroughUtil.mThroughTypeBean.setUserReadId(getIntentUri.getQueryParameter("userReadId"));
  123. } else if (type.equals(ThroughType.TYPEC.getTypeCode())) {
  124. ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPEC.getTypeCode());
  125. ThroughUtil.mThroughTypeBean.setUserReadId(getIntentUri.getQueryParameter("userReadId"));
  126. ThroughUtil.mThroughTypeBean.setBackModel(getIntentUri.getQueryParameter("backModel"));
  127. ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class);
  128. } else if (type.equals(ThroughType.TYPED.getTypeCode())) {
  129. ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPED.getTypeCode());
  130. ThroughUtil.mThroughTypeBean.setEventPosition(getIntentUri.getQueryParameter("eventPosition"));
  131. ((BaseActivity) mView.getActivity()).toNextActivity(MainActivity.class);
  132. }
  133. } else {
  134. Logger.e("跳转首页");
  135. ((BaseActivity) mView.getActivity()).toNextActivity(MainActivity.class);
  136. }
  137. } else {
  138. //如果什么都没有得到,就默认跳转首页
  139. int defaultIndex = intent.getIntExtra("defaultIndex", -1);
  140. Intent intetentt = new Intent(mView.getActivity(), MainActivity.class);
  141. intetentt.putExtra("defaultIndex", defaultIndex);
  142. mView.getActivity().startActivity(intetentt);
  143. // ((BaseActivity) mView.getActivity()).toNextActivity(MainActivity.class);
  144. }
  145. mView.getActivity().finish();
  146. }
  147. public void getUserInfo(Intent intent) {
  148. UMConfigure.submitPolicyGrantResult(mView.getActivity(), true);
  149. UMConfigure.init(mView.getActivity(), Consts.getUMengAppKey(), Consts.getUMengChannel(), UMConfigure.DEVICE_TYPE_PHONE, "");
  150. mUserApi.postFirstEnter(new Callback() {
  151. @Override
  152. public void onSuccess(HttpInfo info) throws IOException {
  153. Logger.e("postFirstEnter-success-info.get:" + info.getRetDetail());
  154. }
  155. @Override
  156. public void onFailure(HttpInfo info) throws IOException {
  157. Logger.e("postFirstEnter-onFailure--info.get:" + info.getRetDetail());
  158. }
  159. });
  160. mUserApi.isLogin(mView.getActivity(), DeviceUuidFactory.getUuid(), new Callback() {
  161. @Override
  162. public void onSuccess(HttpInfo info) throws IOException {
  163. try {
  164. JSONObject object = new JSONObject(info.getRetDetail());
  165. if (object.getString("code").equals("300") || object.getInt("code") == 300) {
  166. if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())
  167. ) {
  168. getScheme(intent);
  169. }
  170. } else {
  171. HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
  172. }.getType());
  173. Consts.setUID(bean.getData().getUid());
  174. //用户是否登录,登录了,创建Consts的userbean
  175. Consts.setmConstsUserBean(bean.getData());
  176. }
  177. } catch (JSONException e) {
  178. e.printStackTrace();
  179. getYFVip(intent);
  180. } finally {
  181. //无论如何最后走判断
  182. //获取是否是vip
  183. getYFVip(intent);
  184. }
  185. }
  186. @Override
  187. public void onFailure(HttpInfo info) throws IOException {
  188. getYFVip(intent);
  189. }
  190. });
  191. }
  192. private void getYFVip(Intent intent) {
  193. EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
  194. @Override
  195. public void success(long time) {
  196. getScheme(intent);
  197. }
  198. @Override
  199. public void error() {
  200. getScheme(intent);
  201. }
  202. });
  203. }
  204. List<Integer> leftBrackets = new ArrayList<>();
  205. List<Integer> rightBrackets = new ArrayList<>();
  206. String mServiceText = "隐私政策隐私充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了向充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了向你提供内容等服务,充分理解《服务协议》和《隐私政策》各条款。点击同意开始接受我们的服务。";
  207. @Override
  208. public void initServiceText(TextView textView) {
  209. textView.setClickable(false);
  210. leftBrackets = getChildIndexFromString(mServiceText, "《");
  211. rightBrackets = getChildIndexFromString(mServiceText, "》");
  212. SpannableStringBuilder style = new SpannableStringBuilder();
  213. style.append(mServiceText);
  214. for (int i = 0; i < leftBrackets.size(); i++) {
  215. final int finalI = i;
  216. style.setSpan(new ClickableSpan() {
  217. @Override
  218. public void onClick(@NonNull View widget) {
  219. lookPrivacy(finalI);
  220. }
  221. @Override
  222. public void updateDrawState(@NonNull TextPaint ds) {
  223. ds.setUnderlineText(false);
  224. ds.setColor(Color.parseColor("#68a5dc"));
  225. }
  226. }, leftBrackets.get(i), rightBrackets.get(i) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  227. }
  228. textView.setText(style);
  229. textView.setMovementMethod(LinkMovementMethod.getInstance());
  230. textView.setHighlightColor(Color.parseColor("#ffffff"));
  231. }
  232. @Override
  233. public void initHuaWei() {
  234. AccountAuthParams params = AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM;
  235. JosAppsClient appsClient = JosApps.getJosAppsClient(mView.getActivity());
  236. final Task<Void> initTask = appsClient.init(new AppParams(params));
  237. initTask.addOnSuccessListener(new OnSuccessListener<Void>() {
  238. @Override
  239. public void onSuccess(Void aVoid) {
  240. Logger.e("华为初始化成功");
  241. checkHuaWeiUpdate();
  242. }
  243. }).addOnFailureListener(new OnFailureListener() {
  244. @Override
  245. public void onFailure(Exception e) {
  246. Logger.e("华为初始化失败:" + e.getMessage());
  247. CusToast.getInstance(mView.getActivity()).show("华为初始化失败", 3000);
  248. }
  249. });
  250. }
  251. @Override
  252. public void checkHuaWeiUpdate() {
  253. mAppUpdateClient = JosApps.getAppUpdateClient(mView.getActivity());
  254. mAppUpdateClient.checkAppUpdate(mView.getActivity(), new HuaWeiUpdateCallBack(mView.getActivity(), mView));
  255. }
  256. @Override
  257. public void onDestroy() {
  258. if (Consts.getUMengChannel().equals(ChannelCodeEnum.HUAWEI_LIANYUN.getChannelCode())) {
  259. mAppUpdateClient.releaseCallBack();
  260. }
  261. }
  262. private List<Integer> getChildIndexFromString(String parent, String child) {
  263. int startIndex = 0;
  264. List<Integer> ids = new ArrayList<>();
  265. while (parent.indexOf(child, startIndex) != -1) {
  266. //ids.add(startIndex);
  267. startIndex = parent.indexOf(child, startIndex);
  268. ids.add(startIndex);
  269. startIndex = startIndex + child.length();
  270. }
  271. return ids;
  272. }
  273. private void lookPrivacy(int index) {
  274. String url = "";
  275. switch (index) {
  276. case 0:
  277. url = Consts.getAgreementServicesUrl();
  278. break;
  279. case 1:
  280. url = Consts.getPrivServiceUrl();
  281. break;
  282. }
  283. Intent intent = new Intent(mView.getActivity(), WebActivity.class);
  284. intent.putExtra("loadUrl", url);
  285. mView.getActivity().startActivity(intent);
  286. }
  287. private static class HuaWeiUpdateCallBack implements CheckUpdateCallBack {
  288. private WeakReference<Context> mContextWeakReference;
  289. SplashContract.View mView;
  290. public HuaWeiUpdateCallBack(Context context, SplashContract.View view) {
  291. mContextWeakReference = new WeakReference<>(context);
  292. mView = view;
  293. }
  294. @Override
  295. public void onUpdateInfo(Intent intent) {
  296. if (intent != null) {
  297. // 更新状态信息
  298. int status = intent.getIntExtra(UpdateKey.STATUS, -99);
  299. if (status == NO_UPGRADE_INFO || status == CHECK_FAILED) {
  300. //没有更新信息
  301. Logger.e("没有查询到更新信息或者是检查失败了:status=" + status);
  302. mView.toMainActivity();
  303. return;
  304. }
  305. Logger.e("check update status is:" + status);
  306. // 返回错误码
  307. int rtnCode = intent.getIntExtra(UpdateKey.FAIL_CODE, -99);
  308. // 返回失败信息
  309. String rtnMessage = intent.getStringExtra(UpdateKey.FAIL_REASON);
  310. // 强制更新应用时,弹出对话框后用户是否点击“退出应用”按钮
  311. boolean isExit = intent.getBooleanExtra(UpdateKey.MUST_UPDATE, false);
  312. Logger.e("rtnCode = " + rtnCode + "rtnMessage = " + rtnMessage);
  313. Serializable info = intent.getSerializableExtra(UpdateKey.INFO);
  314. // 如果info属于ApkUpgradeInfo类型,则拉起更新弹框
  315. if (info instanceof ApkUpgradeInfo) {
  316. Context context = mContextWeakReference.get();
  317. if (context != null) {
  318. // showUpdateDialog接口中最后一个字段传入不同取值会带来不同的用户体验,具体请参考本文档的场景描述,
  319. //true 强制更新
  320. JosApps.getAppUpdateClient(context).showUpdateDialog(context, (ApkUpgradeInfo) info, true);
  321. }
  322. Logger.e("check update success and there is a new update");
  323. }
  324. Logger.e("check update isExit=" + isExit);
  325. if (isExit) {
  326. // 是强制更新应用,用户在弹出的升级提示框中选择了“退出应用”,处理逻辑由您自行控制,这里只是个例子
  327. EApplication.killAppProcess(mContextWeakReference.get());
  328. }
  329. }
  330. }
  331. @Override
  332. public void onMarketInstallInfo(Intent intent) {
  333. }
  334. @Override
  335. public void onMarketStoreError(int i) {
  336. }
  337. @Override
  338. public void onUpdateStoreError(int i) {
  339. }
  340. }
  341. }