123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- 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<String, String> 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<String, String> 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<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
- }.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<String, String> 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();
- }
- }
- }
|