BaseFragment.java 15 KB

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