package com.edufound.reader.base; 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; import android.widget.Toast; import com.alibaba.fastjson.JSONObject; import com.baidu.duer.bot.directive.payload.AmountInfo; import com.baidu.duer.botsdk.BotIntent; import com.baidu.duer.botsdk.IAccountChargeMsgListener; import com.edufound.reader.apiserver.UserApiServerImpl; import com.edufound.reader.application.EApplication; import com.edufound.reader.bean.BaiDuUserInfo; import com.edufound.reader.bean.HttpResultBean; import com.edufound.reader.bean.UserBean; import com.edufound.reader.botsdk.BotRegisterListener; import com.edufound.reader.botsdk.IBotIntentCallback; import com.edufound.reader.receiver.NetworkChangeReceiver; 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.jakewharton.rxbinding4.view.RxView; import com.okhttplib.HttpInfo; import com.okhttplib.callback.Callback; import com.orhanobut.logger.Logger; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import io.reactivex.rxjava3.annotations.Nullable; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.functions.Consumer; public abstract class BaseFragment extends Fragment { public CompositeDisposable mCompositeDisposable; Gson mGson; private boolean isNeedLogin = true; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGson = new Gson(); // 注册网络广播 NetworkChangeReceiver.registerReceiver(getContext()); NetworkChangeReceiver.registerObserver(NetStateChangeObserver); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(this.getLayoutId(), container, false); initView(view); initViewListener(); return view; } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener); } @Override public void onDetach() { super.onDetach(); } @Override public void onDestroyView() { super.onDestroyView(); } /** * 初始化视图 * * @param view */ protected abstract void initView(View view); protected abstract int getLayoutId(); protected abstract void initViewListener(); /** * 添加订阅 */ public void addDisposable(Disposable mDisposable) { if (mCompositeDisposable == null) { mCompositeDisposable = new CompositeDisposable(); } mCompositeDisposable.add(mDisposable); } /** * 取消所有订阅 */ public void clearDisposable() { if (mCompositeDisposable != null) { mCompositeDisposable.clear(); } } @Override public void onDestroy() { BotRegisterListener.removeListener(mBotIntentCallBack); clearDisposable(); super.onDestroy(); } @SuppressLint("AutoDispose") public void addUiClickListener(View view, Consumer onNext) { addDisposable(RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext)); } public abstract void onGetDisconnect(); public abstract void onGetMobileConnect(); public abstract void onGetWifiConnect(); NetworkChangeReceiver.NetStateChangeObserver NetStateChangeObserver = new NetworkChangeReceiver.NetStateChangeObserver() { @Override public void onDisconnect() { //断网了 onGetDisconnect(); } @Override public void onMobileConnect() { //有网了(移动网络) onGetMobileConnect(); } @Override public void onWifiConnect() { //有网了(wifi) onGetWifiConnect(); } }; //百度的回调逻辑代码块 protected void botHandleIntent(BotIntent intent, String customData) { } protected void botOnClickLink(String url, HashMap paramMap) { } protected void botOnHandleScreenNavigatorEvent(int event) { } protected void botOnLinkAccountSucceed(String s, String s1) { } protected void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) { } protected void botOnBuyStatusUpdated(@NonNull final String purchaseResult, @NonNull final String productId, @NonNull final String baiduOrderId, @NonNull final String sellerOrderId, @Nullable final String msg, String token) { } IBotIntentCallback mBotIntentCallBack = new IBotIntentCallback() { @Override public void handleIntent(BotIntent intent, String customData) { Logger.e("fragment---intent.name:" + intent.name); if (intent.name.equals("all_login")) { //用户主动要求登录 EfunboxUtil.userLogin(EApplication.mActivityList.get(EApplication.mActivityList.size() - 1)); return; } else if (intent.name.equals("user_info")) { //获取是不是百度VIP Consts.setmConstsBaiDuUserBean(mGson.fromJson(customData, BaiDuUserInfo.class)); Logger.e("json----" + mGson.toJson(Consts.getmConstsBaiDuUserBean())); if (isNeedLogin) { BotRegisterListener.BaiDuLogin(); } else { isNeedLogin = true; } return; } if (BotRegisterListener.isNoLoginIntent(intent)) { //不是获取手机号 Logger.e("不是获取手机号--不是获取手机号:" + intent.name + "---" + intent.slots.toString()); botHandleIntent(intent, customData); } else { Logger.e("是获取手机号--是获取手机号"); //是获取手机号 if (intent.slots.get(0).value.equals("SUCCESS")) { //获取手机号Token成功 String token = intent.slots.get(1).value; UserApiServerImpl userApiServer = new UserApiServerImpl(); Activity topActivity = EApplication.mActivityList.get(EApplication.mActivityList.size() - 1); userApiServer.getBaiDuUserPhone(topActivity, token, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { JSONObject object = JSONObject.parseObject(info.getRetDetail().toString()); String phone = JSONObject.parseObject(object.getString("data")).getString("phone"); Logger.e("获取的手机号:" + phone); if (EfunboxUtil.isMobileNO(phone)) { Map map = new HashMap<>(); map.put("deviceCode", DeviceUuidFactory.getUuid()); 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()); map.put("userId", Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId()); 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 { Logger.e("手机号注册成功:" + info.getRetDetail()); HttpResultBean bean = info.getRetDetail(new TypeToken>() { }.getType()); Consts.setUID(bean.getData().getUid()); //用户是否登录,登录了,创建Consts的userbean String nickName = EfunboxUtil.setPhoneMiddle(bean.getData().getMobile()); bean.getData().setNickName(nickName); Consts.setmConstsUserBean(bean.getData()); Logger.e("看看到底对没有:" + mGson.toJson(Consts.getmConstsUserBean())); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("手机号注册失败:" + info.getRetDetail()); Toast.makeText(topActivity, "注册失败", Toast.LENGTH_SHORT).show(); } }); } else { Toast.makeText(topActivity, "手机号不正确", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(HttpInfo info) throws IOException { } }); } else if (intent.slots.get(0).value.equals("FAIL")) { //获取手机号Token失败 } } } @Override public void onClickLink(String url, HashMap paramMap) { botOnClickLink(url, paramMap); } @Override public void onHandleScreenNavigatorEvent(int event) { botOnHandleScreenNavigatorEvent(event); } }; IAccountChargeMsgListener mIAccountChargeMsgListener = new IAccountChargeMsgListener() { @Override public void onLinkAccountSucceed(String s, String s1) { botOnLinkAccountSucceed(s, s1); } @Override public void onChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount, AmountInfo capturedAmount, long creationTimestamp, String baiduOrderReferenceId, String sellerOrderId, String msg) { botOnChargeStatusUpdated(purchaseResult, authorizationAmount, capturedAmount, creationTimestamp, baiduOrderReferenceId, sellerOrderId, msg); } @Override public void onBuyStatusUpdated(@NonNull final String purchaseResult, @NonNull final String productId, @NonNull final String baiduOrderId, @NonNull final String sellerOrderId, @Nullable final String msg, String token) { isNeedLogin = false; //处理支付回调 Logger.e("purchaseResult:" + purchaseResult); Logger.e("productId:" + productId); Logger.e("baiduOrderId:" + baiduOrderId); Logger.e("sellerOrderId:" + sellerOrderId); Logger.e("msg:" + msg); Logger.e("token:" + token); if (purchaseResult.equals("SUCCESS")) { //成功 } else if (purchaseResult.equals("ERROR")) { //支付失败 } botOnBuyStatusUpdated(purchaseResult, productId, baiduOrderId, sellerOrderId, msg, token); } }; @Override public void onResume() { super.onResume(); if (!isNeedLogin) { BotRegisterListener.getBaiDuVipInfo(); } } }