BaseFragment.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. package com.edufound.reader.base;
  2. import android.annotation.SuppressLint;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.Toast;
  12. import com.alibaba.fastjson.JSONObject;
  13. import com.baidu.duer.bot.directive.payload.AmountInfo;
  14. import com.baidu.duer.botsdk.BotIntent;
  15. import com.baidu.duer.botsdk.IAccountChargeMsgListener;
  16. import com.edufound.reader.apiserver.UserApiServerImpl;
  17. import com.edufound.reader.application.EApplication;
  18. import com.edufound.reader.bean.BaiDuUserInfo;
  19. import com.edufound.reader.bean.HttpResultBean;
  20. import com.edufound.reader.bean.UserBean;
  21. import com.edufound.reader.botsdk.BotRegisterListener;
  22. import com.edufound.reader.botsdk.IBotIntentCallback;
  23. import com.edufound.reader.receiver.NetworkChangeReceiver;
  24. import com.edufound.reader.util.Consts;
  25. import com.edufound.reader.util.DeviceUuidFactory;
  26. import com.edufound.reader.util.EfunboxUtil;
  27. import com.edufound.reader.util.MMKVEncodeKey;
  28. import com.edufound.reader.util.MMKVUtil;
  29. import com.google.gson.Gson;
  30. import com.google.gson.reflect.TypeToken;
  31. import com.jakewharton.rxbinding4.view.RxView;
  32. import com.okhttplib.HttpInfo;
  33. import com.okhttplib.callback.Callback;
  34. import com.orhanobut.logger.Logger;
  35. import java.io.IOException;
  36. import java.util.HashMap;
  37. import java.util.Map;
  38. import java.util.concurrent.TimeUnit;
  39. import androidx.annotation.NonNull;
  40. import androidx.fragment.app.Fragment;
  41. import io.reactivex.rxjava3.annotations.Nullable;
  42. import io.reactivex.rxjava3.disposables.CompositeDisposable;
  43. import io.reactivex.rxjava3.disposables.Disposable;
  44. import io.reactivex.rxjava3.functions.Consumer;
  45. public abstract class BaseFragment extends Fragment {
  46. public CompositeDisposable mCompositeDisposable;
  47. Gson mGson;
  48. private boolean isNeedLogin = true;
  49. @Override
  50. public void onCreate(@Nullable Bundle savedInstanceState) {
  51. super.onCreate(savedInstanceState);
  52. mGson = new Gson();
  53. // 注册网络广播
  54. NetworkChangeReceiver.registerReceiver(getContext());
  55. NetworkChangeReceiver.registerObserver(NetStateChangeObserver);
  56. }
  57. @Nullable
  58. @Override
  59. public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
  60. View view = inflater.inflate(this.getLayoutId(), container, false);
  61. initView(view);
  62. initViewListener();
  63. return view;
  64. }
  65. @Override
  66. public void onAttach(@NonNull Context context) {
  67. super.onAttach(context);
  68. BotRegisterListener.registerListener(mBotIntentCallBack, mIAccountChargeMsgListener);
  69. }
  70. @Override
  71. public void onDetach() {
  72. super.onDetach();
  73. }
  74. @Override
  75. public void onDestroyView() {
  76. super.onDestroyView();
  77. }
  78. /**
  79. * 初始化视图
  80. *
  81. * @param view
  82. */
  83. protected abstract void initView(View view);
  84. protected abstract int getLayoutId();
  85. protected abstract void initViewListener();
  86. /**
  87. * 添加订阅
  88. */
  89. public void addDisposable(Disposable mDisposable) {
  90. if (mCompositeDisposable == null) {
  91. mCompositeDisposable = new CompositeDisposable();
  92. }
  93. mCompositeDisposable.add(mDisposable);
  94. }
  95. /**
  96. * 取消所有订阅
  97. */
  98. public void clearDisposable() {
  99. if (mCompositeDisposable != null) {
  100. mCompositeDisposable.clear();
  101. }
  102. }
  103. @Override
  104. public void onDestroy() {
  105. BotRegisterListener.removeListener(mBotIntentCallBack);
  106. clearDisposable();
  107. super.onDestroy();
  108. }
  109. @SuppressLint("AutoDispose")
  110. public void addUiClickListener(View view, Consumer onNext) {
  111. addDisposable(RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext));
  112. }
  113. public abstract void onGetDisconnect();
  114. public abstract void onGetMobileConnect();
  115. public abstract void onGetWifiConnect();
  116. NetworkChangeReceiver.NetStateChangeObserver NetStateChangeObserver = new NetworkChangeReceiver.NetStateChangeObserver() {
  117. @Override
  118. public void onDisconnect() {
  119. //断网了
  120. onGetDisconnect();
  121. }
  122. @Override
  123. public void onMobileConnect() {
  124. //有网了(移动网络)
  125. onGetMobileConnect();
  126. }
  127. @Override
  128. public void onWifiConnect() {
  129. //有网了(wifi)
  130. onGetWifiConnect();
  131. }
  132. };
  133. //百度的回调逻辑代码块
  134. protected void botHandleIntent(BotIntent intent, String customData) {
  135. }
  136. protected void botOnClickLink(String url, HashMap<String, String> paramMap) {
  137. }
  138. protected void botOnHandleScreenNavigatorEvent(int event) {
  139. }
  140. protected void botOnLinkAccountSucceed(String s, String s1) {
  141. }
  142. protected void botOnChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount,
  143. AmountInfo capturedAmount, long creationTimestamp,
  144. String baiduOrderReferenceId, String sellerOrderId, String msg) {
  145. }
  146. protected void botOnBuyStatusUpdated(@NonNull final String purchaseResult,
  147. @NonNull final String productId,
  148. @NonNull final String baiduOrderId,
  149. @NonNull final String sellerOrderId, @Nullable final String msg, String token) {
  150. }
  151. IBotIntentCallback mBotIntentCallBack = new IBotIntentCallback() {
  152. @Override
  153. public void handleIntent(BotIntent intent, String customData) {
  154. Logger.e("fragment---intent.name:" + intent.name);
  155. if (intent.name.equals("all_login")) {
  156. //用户主动要求登录
  157. EfunboxUtil.userLogin(EApplication.mActivityList.get(EApplication.mActivityList.size() - 1));
  158. return;
  159. } else if (intent.name.equals("user_info")) {
  160. //获取是不是百度VIP
  161. Consts.setmConstsBaiDuUserBean(mGson.fromJson(customData, BaiDuUserInfo.class));
  162. Logger.e("json----" + mGson.toJson(Consts.getmConstsBaiDuUserBean()));
  163. if (isNeedLogin) {
  164. BotRegisterListener.BaiDuLogin();
  165. } else {
  166. isNeedLogin = true;
  167. }
  168. return;
  169. }
  170. if (BotRegisterListener.isNoLoginIntent(intent)) {
  171. //不是获取手机号
  172. Logger.e("不是获取手机号--不是获取手机号:" + intent.name + "---" + intent.slots.toString());
  173. botHandleIntent(intent, customData);
  174. } else {
  175. Logger.e("是获取手机号--是获取手机号");
  176. //是获取手机号
  177. if (intent.slots.get(0).value.equals("SUCCESS")) {
  178. //获取手机号Token成功
  179. String token = intent.slots.get(1).value;
  180. UserApiServerImpl userApiServer = new UserApiServerImpl();
  181. Activity topActivity = EApplication.mActivityList.get(EApplication.mActivityList.size() - 1);
  182. userApiServer.getBaiDuUserPhone(topActivity, token, new Callback() {
  183. @Override
  184. public void onSuccess(HttpInfo info) throws IOException {
  185. JSONObject object = JSONObject.parseObject(info.getRetDetail().toString());
  186. String phone = JSONObject.parseObject(object.getString("data")).getString("phone");
  187. Logger.e("获取的手机号:" + phone);
  188. if (EfunboxUtil.isMobileNO(phone)) {
  189. Map<String, String> map = new HashMap<>();
  190. map.put("deviceCode", DeviceUuidFactory.getUuid());
  191. map.put("channel", Consts.getUmengChannel());
  192. map.put("mobileNo", phone);
  193. map.put("nickName", EfunboxUtil.setPhoneMiddle(phone));
  194. Logger.e("Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId():" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
  195. map.put("userId", Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId());
  196. if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
  197. //如果没有,默认给一年级
  198. map.put("grade", "PRIMARY_FIRST_GRADE");
  199. } else {
  200. map.put("grade", MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE));
  201. }
  202. String json = mGson.toJson(map);
  203. Logger.e("json:" + json);
  204. userApiServer.registerUserId(topActivity, json, new Callback() {
  205. @Override
  206. public void onSuccess(HttpInfo info) throws IOException {
  207. Logger.e("手机号注册成功:" + info.getRetDetail());
  208. HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
  209. }.getType());
  210. Consts.setUID(bean.getData().getUid());
  211. //用户是否登录,登录了,创建Consts的userbean
  212. String nickName = EfunboxUtil.setPhoneMiddle(bean.getData().getMobile());
  213. bean.getData().setNickName(nickName);
  214. Consts.setmConstsUserBean(bean.getData());
  215. Logger.e("看看到底对没有:" + mGson.toJson(Consts.getmConstsUserBean()));
  216. }
  217. @Override
  218. public void onFailure(HttpInfo info) throws IOException {
  219. Logger.e("手机号注册失败:" + info.getRetDetail());
  220. Toast.makeText(topActivity, "注册失败", Toast.LENGTH_SHORT).show();
  221. }
  222. });
  223. } else {
  224. Toast.makeText(topActivity, "手机号不正确", Toast.LENGTH_SHORT).show();
  225. }
  226. }
  227. @Override
  228. public void onFailure(HttpInfo info) throws IOException {
  229. }
  230. });
  231. } else if (intent.slots.get(0).value.equals("FAIL")) {
  232. //获取手机号Token失败
  233. }
  234. }
  235. }
  236. @Override
  237. public void onClickLink(String url, HashMap<String, String> paramMap) {
  238. botOnClickLink(url, paramMap);
  239. }
  240. @Override
  241. public void onHandleScreenNavigatorEvent(int event) {
  242. botOnHandleScreenNavigatorEvent(event);
  243. }
  244. };
  245. IAccountChargeMsgListener mIAccountChargeMsgListener = new IAccountChargeMsgListener() {
  246. @Override
  247. public void onLinkAccountSucceed(String s, String s1) {
  248. botOnLinkAccountSucceed(s, s1);
  249. }
  250. @Override
  251. public void onChargeStatusUpdated(String purchaseResult, AmountInfo authorizationAmount,
  252. AmountInfo capturedAmount, long creationTimestamp,
  253. String baiduOrderReferenceId, String sellerOrderId, String msg) {
  254. botOnChargeStatusUpdated(purchaseResult, authorizationAmount, capturedAmount, creationTimestamp, baiduOrderReferenceId, sellerOrderId, msg);
  255. }
  256. @Override
  257. public void onBuyStatusUpdated(@NonNull final String purchaseResult,
  258. @NonNull final String productId,
  259. @NonNull final String baiduOrderId,
  260. @NonNull final String sellerOrderId, @Nullable final String msg, String token) {
  261. isNeedLogin = false;
  262. //处理支付回调
  263. Logger.e("purchaseResult:" + purchaseResult);
  264. Logger.e("productId:" + productId);
  265. Logger.e("baiduOrderId:" + baiduOrderId);
  266. Logger.e("sellerOrderId:" + sellerOrderId);
  267. Logger.e("msg:" + msg);
  268. Logger.e("token:" + token);
  269. if (purchaseResult.equals("SUCCESS")) {
  270. //成功
  271. } else if (purchaseResult.equals("ERROR")) {
  272. //支付失败
  273. }
  274. botOnBuyStatusUpdated(purchaseResult, productId, baiduOrderId, sellerOrderId, msg, token);
  275. }
  276. };
  277. @Override
  278. public void onResume() {
  279. super.onResume();
  280. if (!isNeedLogin) {
  281. BotRegisterListener.getBaiDuVipInfo();
  282. }
  283. }
  284. }