123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- 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.method.LinkMovementMethod;
- import android.text.style.ClickableSpan;
- import android.view.View;
- import android.widget.TextView;
- import com.baidu.duer.membersdk.MemberSdkManager;
- import com.baidu.duer.membersdk.constant.MemberSdkConstants;
- import com.edufound.reader.activity.MainActivity;
- import com.edufound.reader.activity.RecordActivity;
- import com.edufound.reader.activity.SmallFullVideoActivity;
- 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.ChannelCodeEnum;
- import com.edufound.reader.bean.HttpResultBean;
- 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.util.Consts;
- import com.edufound.reader.util.DeviceUuidFactory;
- import com.edufound.reader.util.EfunboxUtil;
- import com.edufound.reader.util.ThroughUtil;
- 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.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 io.reactivex.rxjava3.annotations.NonNull;
- public class SplashPresenter extends BasePresenter<SplashContract.View> implements SplashContract.Presenter {
- UserApiServerImpl mUserApi;
- OrderApiServerImpl mOrderApi;
- ActivityEventServerImpl mEventApi;
- AppUpdateClient mAppUpdateClient;
- public SplashPresenter() {
- mUserApi = new UserApiServerImpl();
- mOrderApi = new OrderApiServerImpl();
- mEventApi = new ActivityEventServerImpl();
- }
- private void getScheme(Intent intent) {
- Uri getIntentUri = null;
- if (intent != null) {
- //有intent或者scheme
- 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);
- MemberSdkManager.getInstance().setShowParameter(infoData);
- }
- if (intent.getStringExtra("url") != null && !intent.getStringExtra("url").equals("")) {
- getIntentUri = Uri.parse(intent.getStringExtra("url"));
- }
- //efunbox://com.edufound.reader/splash?resid=11132
- } else {
- //除了百度都走这里
- getIntentUri = intent.getData();
- }
- }
- //efunbox://com.edufound.reader/splash?exampleId=103126003&backModel=home&type=typeA (直接去朗读页面参数)
- //efunbox://com.edufound.reader/splash?userReadId=1610706272358766&backModel=home&type=typeB (根据id把视频提前)
- //efunbox://com.edufound.reader/splash?userReadId=1610706272358766&backModel=home&type=typeC (根据id把视频提前)
- // getIntentUri = Uri.parse("efunbox://com.edufound.reader/splash?exampleId=103126003&backModel=home&type=typeA");
- //判断获取的uri是不是空的
- if (getIntentUri != null) {
- String type = getIntentUri.getQueryParameter("type");
- if (getIntentUri.getQueryParameter("type") != null) {
- ThroughUtil.mThroughTypeBean = new ThroughTypeBean();
- if (type.equals(ThroughType.TYPEA.getTypeCode())) {
- //typeA类型,直接进入朗读界面
- Logger.e("进入了TypeA类型");
- ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPEA.getTypeCode());
- ThroughUtil.mThroughTypeBean.setExampleId(getIntentUri.getQueryParameter("exampleId"));
- //backModel只有app和home两个值,app是直接退出应用,home是返回首页
- ThroughUtil.mThroughTypeBean.setBackModel(getIntentUri.getQueryParameter("backModel"));
- Logger.e("getIntentUri.getQueryParameter(\"exampleId\"):" + getIntentUri.getQueryParameter("exampleId"));
- Logger.e("getIntentUri.getQueryParameter(\"backModel\"):" + getIntentUri.getQueryParameter("backModel"));
- //暂时还没处理defaultIndex
- // String defaultIndex = getIntentUri.getQueryParameter("backDefaultIndex");
- // if (!TextUtils.isEmpty(defaultIndex)) {
- // ThroughUtil.mThroughTypeBean.setBackDefaultIndex(getIntentUri.getQueryParameter("backDefaultIndex"));
- // } else {
- // ThroughUtil.mThroughTypeBean.setBackDefaultIndex("0");
- // }
- ((BaseActivity) mView.getActivity()).toNextActivity(RecordActivity.class);
- } else if (type.equals(ThroughType.TYPEB.getTypeCode())) {
- Logger.e("进入了TypeB类型");
- //把收到的ID视频提到第一个
- ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPEB.getTypeCode());
- ThroughUtil.mThroughTypeBean.setUserReadId(getIntentUri.getQueryParameter("userReadId"));
- } else if (type.equals(ThroughType.TYPEC.getTypeCode())) {
- ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPEC.getTypeCode());
- ThroughUtil.mThroughTypeBean.setUserReadId(getIntentUri.getQueryParameter("userReadId"));
- ThroughUtil.mThroughTypeBean.setBackModel(getIntentUri.getQueryParameter("backModel"));
- ((BaseActivity) mView.getActivity()).toNextActivity(SmallFullVideoActivity.class);
- } else if (type.equals(ThroughType.TYPED.getTypeCode())) {
- ThroughUtil.mThroughTypeBean.setmThroughType(ThroughType.TYPED.getTypeCode());
- ThroughUtil.mThroughTypeBean.setEventPosition(getIntentUri.getQueryParameter("eventPosition"));
- ((BaseActivity) mView.getActivity()).toNextActivity(MainActivity.class);
- }
- } else {
- Logger.e("跳转首页");
- ((BaseActivity) mView.getActivity()).toNextActivity(MainActivity.class);
- }
- } else {
- //如果什么都没有得到,就默认跳转首页
- int defaultIndex = intent.getIntExtra("defaultIndex", -1);
- Intent intetentt = new Intent(mView.getActivity(), MainActivity.class);
- intetentt.putExtra("defaultIndex", defaultIndex);
- mView.getActivity().startActivity(intetentt);
- // ((BaseActivity) mView.getActivity()).toNextActivity(MainActivity.class);
- }
- mView.getActivity().finish();
- }
- 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 {
- Logger.e("postFirstEnter-success-info.get:" + info.getRetDetail());
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- Logger.e("postFirstEnter-onFailure--info.get:" + info.getRetDetail());
- }
- });
- mUserApi.isLogin(mView.getActivity(), DeviceUuidFactory.getUuid(), new Callback() {
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- try {
- JSONObject object = new JSONObject(info.getRetDetail());
- if (object.getString("code").equals("300") || object.getInt("code") == 300) {
- if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())
- ) {
- getScheme(intent);
- }
- } else {
- HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
- }.getType());
- Consts.setUID(bean.getData().getUid());
- //用户是否登录,登录了,创建Consts的userbean
- Consts.setmConstsUserBean(bean.getData());
- }
- } catch (JSONException e) {
- e.printStackTrace();
- getYFVip(intent);
- } finally {
- //无论如何最后走判断
- //获取是否是vip
- getYFVip(intent);
- }
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- getYFVip(intent);
- }
- });
- }
- private void getYFVip(Intent intent) {
- EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
- @Override
- public void success(long time) {
- getScheme(intent);
- }
- @Override
- public void error() {
- getScheme(intent);
- }
- });
- }
- List<Integer> leftBrackets = new ArrayList<>();
- List<Integer> rightBrackets = new ArrayList<>();
- String mServiceText = "隐私政策隐私充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了向充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了向你提供内容等服务,充分理解《服务协议》和《隐私政策》各条款。点击同意开始接受我们的服务。";
- @Override
- public void initServiceText(TextView textView) {
- textView.setClickable(false);
- leftBrackets = getChildIndexFromString(mServiceText, "《");
- rightBrackets = getChildIndexFromString(mServiceText, "》");
- SpannableStringBuilder style = new SpannableStringBuilder();
- style.append(mServiceText);
- for (int i = 0; i < leftBrackets.size(); i++) {
- final int finalI = i;
- style.setSpan(new ClickableSpan() {
- @Override
- public void onClick(@NonNull View widget) {
- lookPrivacy(finalI);
- }
- @Override
- public void updateDrawState(@NonNull TextPaint ds) {
- ds.setUnderlineText(false);
- ds.setColor(Color.parseColor("#68a5dc"));
- }
- }, leftBrackets.get(i), rightBrackets.get(i) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- textView.setText(style);
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- 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;
- List<Integer> ids = new ArrayList<>();
- while (parent.indexOf(child, startIndex) != -1) {
- //ids.add(startIndex);
- startIndex = parent.indexOf(child, startIndex);
- ids.add(startIndex);
- startIndex = startIndex + child.length();
- }
- return ids;
- }
- private void lookPrivacy(int index) {
- String url = "";
- switch (index) {
- case 0:
- url = Consts.getAgreementServicesUrl();
- break;
- case 1:
- url = Consts.getPrivServiceUrl();
- break;
- }
- Intent intent = new Intent(mView.getActivity(), WebActivity.class);
- intent.putExtra("loadUrl", url);
- 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) {
- }
- }
- }
|