MainPresenter.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. package com.edufound.reader.presenter;
  2. import android.graphics.Color;
  3. import android.graphics.drawable.ColorDrawable;
  4. import android.text.TextUtils;
  5. import android.view.KeyEvent;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.FrameLayout;
  9. import android.widget.HorizontalScrollView;
  10. import android.widget.LinearLayout;
  11. import android.widget.RadioButton;
  12. import android.widget.RadioGroup;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. import com.edufound.reader.R;
  16. import com.edufound.reader.apiserver.ActivityEventServerImpl;
  17. import com.edufound.reader.apiserver.OrderApiServerImpl;
  18. import com.edufound.reader.apiserver.UserApiServerImpl;
  19. import com.edufound.reader.application.EApplication;
  20. import com.edufound.reader.base.BaseActivity;
  21. import com.edufound.reader.base.BasePresenter;
  22. import com.edufound.reader.bean.ActivityEventBean;
  23. import com.edufound.reader.bean.ChannelCodeEnum;
  24. import com.edufound.reader.bean.HttpResultBean;
  25. import com.edufound.reader.bean.SignBean;
  26. import com.edufound.reader.bean.UserBean;
  27. import com.edufound.reader.bean.UserEventEnum;
  28. import com.edufound.reader.contract.MainContract;
  29. import com.edufound.reader.cusview.CusToast;
  30. import com.edufound.reader.fragment.CharacterFragment3;
  31. import com.edufound.reader.fragment.EventFragment;
  32. import com.edufound.reader.fragment.MyTabFragment;
  33. import com.edufound.reader.fragment.RecommendFragment;
  34. import com.edufound.reader.listener.PopUtilClickListener;
  35. import com.edufound.reader.model.MainModel;
  36. import com.edufound.reader.popwindow.PopWindowUtil;
  37. import com.edufound.reader.util.Consts;
  38. import com.edufound.reader.util.DeviceUuidFactory;
  39. import com.edufound.reader.util.EfunboxUtil;
  40. import com.edufound.reader.util.MMKVEncodeKey;
  41. import com.edufound.reader.util.MMKVUtil;
  42. import com.edufound.reader.util.SizeUtils;
  43. import com.google.gson.reflect.TypeToken;
  44. import com.okhttplib.HttpInfo;
  45. import com.okhttplib.callback.Callback;
  46. import com.orhanobut.logger.Logger;
  47. import org.json.JSONException;
  48. import org.json.JSONObject;
  49. import java.io.IOException;
  50. import java.util.HashMap;
  51. import java.util.Map;
  52. import androidx.fragment.app.Fragment;
  53. import androidx.fragment.app.FragmentManager;
  54. import androidx.fragment.app.FragmentTransaction;
  55. public class MainPresenter extends BasePresenter<MainContract.View> implements MainContract.Presenter {
  56. MainModel mModel;
  57. UserApiServerImpl mUserApi;
  58. OrderApiServerImpl mOrderApi;
  59. ActivityEventServerImpl mEventApi;
  60. MyTabFragment mUserFragment;
  61. EventFragment mEventFragment;
  62. RecommendFragment mRecommendFragment;
  63. FragmentManager mFragmentManager;
  64. RecommendFragment mFollowFragment;
  65. CharacterFragment3 mCharacterFragment;
  66. int mRadioCheckIndex = -1;
  67. public MainPresenter(FragmentManager fragmentManager) {
  68. mModel = new MainModel();
  69. mUserApi = new UserApiServerImpl();
  70. mOrderApi = new OrderApiServerImpl();
  71. mEventApi = new ActivityEventServerImpl();
  72. mFragmentManager = fragmentManager;
  73. resumeFragment();
  74. }
  75. @Override
  76. public void onRadioChecked(RadioGroup radioGroup, int id) {
  77. ((BaseActivity) mView.getActivity()).removeFirstTipView();
  78. switch (id) {
  79. case R.id.main_left_tab_layout_myinfo:
  80. //我的
  81. if (EfunboxUtil.checkLogin(mView.getActivity(), mView.getRootView())) {
  82. mRadioCheckIndex = 0;
  83. mRecommendFragment = null;
  84. mEventFragment = null;
  85. mFollowFragment = null;
  86. mCharacterFragment = null;
  87. if (mUserFragment == null) {
  88. mUserFragment = new MyTabFragment();
  89. }
  90. changeFragmentLayout(mUserFragment);
  91. mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_MY.getEvent());
  92. } else {
  93. if (radioGroup != null) {
  94. if (radioGroup.getChildAt(mRadioCheckIndex) != null) {
  95. ((RadioButton) radioGroup.getChildAt(mRadioCheckIndex)).setChecked(true);
  96. }
  97. }
  98. }
  99. break;
  100. case R.id.main_left_tab_layout_event:
  101. //活动
  102. mRadioCheckIndex = 1;
  103. mRecommendFragment = null;
  104. mUserFragment = null;
  105. mFollowFragment = null;
  106. mCharacterFragment = null;
  107. if (mEventFragment == null) {
  108. mEventFragment = new EventFragment();
  109. }
  110. changeFragmentLayout(mEventFragment);
  111. mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_EVENT.getEvent());
  112. break;
  113. case R.id.main_left_tab_layout_recommend:
  114. //推荐
  115. mRadioCheckIndex = 2;
  116. // ((RadioButton) radioGroup.getChildAt(mRadioCheckIndex)).setChecked(true);
  117. mUserFragment = null;
  118. mFollowFragment = null;
  119. mEventFragment = null;
  120. mCharacterFragment = null;
  121. if (mRecommendFragment == null) {
  122. mRecommendFragment = new RecommendFragment(0);
  123. }
  124. changeFragmentLayout(mRecommendFragment);
  125. mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_RECOMMEND.getEvent());
  126. break;
  127. case R.id.main_left_tab_layout_follow:
  128. //关注
  129. if (EfunboxUtil.checkLogin(mView.getActivity(), mView.getRootView())) {
  130. mRadioCheckIndex = 3;
  131. mUserFragment = null;
  132. mCharacterFragment = null;
  133. mEventFragment = null;
  134. mRecommendFragment = null;
  135. if (mFollowFragment == null) {
  136. mFollowFragment = new RecommendFragment(1);
  137. }
  138. changeFragmentLayout(mFollowFragment);
  139. mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_SUBSCRIBE.getEvent());
  140. } else {
  141. ((RadioButton) radioGroup.getChildAt(mRadioCheckIndex)).setChecked(true);
  142. }
  143. break;
  144. case R.id.main_left_tab_layout_character:
  145. //任务
  146. Logger.e("任务");
  147. mRadioCheckIndex = 4;
  148. ((RadioButton) radioGroup.getChildAt(mRadioCheckIndex)).setChecked(true);
  149. mUserFragment = null;
  150. mFollowFragment = null;
  151. mRecommendFragment = null;
  152. mEventFragment = null;
  153. if (mCharacterFragment == null) {
  154. mCharacterFragment = new CharacterFragment3();
  155. }
  156. changeFragmentLayout(mCharacterFragment);
  157. mUserApi.postUserEvent(mView.getActivity(), UserEventEnum.EVENT_RESOURCES.getEvent());
  158. break;
  159. }
  160. }
  161. void changeFragmentLayout(Fragment fragment) {
  162. try {
  163. ((BaseActivity) mView.getActivity()).removeFirstTipView();
  164. FragmentTransaction transaction = mFragmentManager.beginTransaction();
  165. transaction.addToBackStack(null);
  166. transaction.replace(R.id.main_fragment_layout, fragment);
  167. transaction.commit();
  168. } catch (Exception e) {
  169. e.printStackTrace();
  170. CusToast.getInstance(mView.getActivity()).show("出现问题,重启应用", 3000);
  171. EApplication.reloadApp(2);
  172. }
  173. }
  174. @Override
  175. public void activityDestroy() {
  176. }
  177. @Override
  178. public void activityPause() {
  179. }
  180. @Override
  181. public void activityResume() {
  182. refMyFragment();
  183. getYFVip();
  184. }
  185. @Override
  186. public void checkModelIsDebug() {
  187. if (Consts.isIsDebug()) {
  188. {
  189. HorizontalScrollView scrollView = new HorizontalScrollView(mView.getActivity());
  190. ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
  191. scrollView.setLayoutParams(params);
  192. LinearLayout testlayout = new LinearLayout(mView.getActivity());
  193. testlayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
  194. testlayout.setDividerDrawable(new ColorDrawable() {
  195. @Override
  196. public int getIntrinsicWidth() {
  197. return SizeUtils.dp2px(mView.getActivity(), 50);
  198. }
  199. });
  200. testlayout.setOrientation(LinearLayout.HORIZONTAL);
  201. TextView tv = new TextView(mView.getActivity());
  202. tv.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
  203. tv.setTextSize(SizeUtils.px2dp(mView.getActivity(), 30));
  204. tv.setTextColor(Color.RED);
  205. tv.setBackgroundColor(mView.getActivity().getResources().getColor(R.color.translucent_background));
  206. tv.setText("当前在Debug模式下(->application->setIsDebug)");
  207. tv.setOnClickListener(new View.OnClickListener() {
  208. @Override
  209. public void onClick(View view) {
  210. // MMKVUtil.getInstance().clearAll();
  211. // EfunboxUtil.toWebFlowerActivity(mView.getActivity(), "http://activity.ai160.com/index.html", null);
  212. }
  213. });
  214. testlayout.addView(tv);
  215. scrollView.addView(testlayout);
  216. mView.getRootView().addView(scrollView);
  217. }
  218. }
  219. }
  220. @Override
  221. public void showSelectGradeWindow() {
  222. mView.getRootView().postDelayed(new Runnable() {
  223. @Override
  224. public void run() {
  225. PopWindowUtil.showSelectGradeWindow(mView.getActivity(), mView.getRootView(), 0, new PopUtilClickListener() {
  226. @Override
  227. public void clickCancel() {
  228. }
  229. @Override
  230. public void clickSubmit(Object object) {
  231. // Toast.makeText(mView.getActivity(), "选择了:" + EfunboxUtil.getEnumByCNGrade(object.toString()), Toast.LENGTH_SHORT).show();
  232. MMKVUtil.getInstance().encode(MMKVEncodeKey.USER_GRADE, EfunboxUtil.getEnumByCNGrade(object.toString()));
  233. getLoginEvent();
  234. }
  235. });
  236. }
  237. }, 500);
  238. }
  239. @Override
  240. public void userIsLogin() {
  241. mUserApi.isLogin(mView.getActivity(), DeviceUuidFactory.getUuid(), new Callback() {
  242. @Override
  243. public void onSuccess(HttpInfo info) throws IOException {
  244. try {
  245. JSONObject object = new JSONObject(info.getRetDetail());
  246. if (object.getString("code").equals("300") || object.getInt("code") == 300) {
  247. //没有用户数据
  248. if (TextUtils.isEmpty(MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE))) {
  249. //没有选择过年纪,选择年纪
  250. Logger.e("没有选择过年纪,选择年纪");
  251. showSelectGradeWindow();
  252. } else {
  253. //选择过年纪。无处理
  254. }
  255. // registerMobile("18655365222");
  256. getYFVip();
  257. } else {
  258. HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
  259. }.getType());
  260. Consts.setUID(bean.getData().getUid());
  261. //用户是否登录,登录了,创建Consts的userbean
  262. Consts.setmConstsUserBean(bean.getData());
  263. mUserApi.loginSign(mView.getActivity(), new Callback() {
  264. @Override
  265. public void onSuccess(HttpInfo info) throws IOException {
  266. try {
  267. HttpResultBean<SignBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<SignBean>>() {
  268. }.getType());
  269. if (bean.getData() != null) {
  270. if (bean.getData().getIsSign()) {
  271. CusToast.getInstance(mView.getActivity()).show("恭喜签到成功\n奖励" + bean.getData().getCount() + "朵小红花", 2000);
  272. }
  273. } else {
  274. Logger.e("签到参数 isSign是空的");
  275. }
  276. } catch (Exception e) {
  277. e.printStackTrace();
  278. } finally {
  279. getYFVip();
  280. }
  281. }
  282. @Override
  283. public void onFailure(HttpInfo info) throws IOException {
  284. Logger.e("info:" + info.getRetDetail());
  285. }
  286. });
  287. }
  288. } catch (JSONException e) {
  289. e.printStackTrace();
  290. } finally {
  291. //有没有用户都先检查活动
  292. EfunboxUtil.checkEvents(mView.getActivity());
  293. getLoginEvent();
  294. }
  295. }
  296. @Override
  297. public void onFailure(HttpInfo info) throws IOException {
  298. if (TextUtils.isEmpty(MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE))) {
  299. //没有选择过年纪,选择年纪
  300. showSelectGradeWindow();
  301. Logger.e("onFailureonFailureonFailureonFailure,选择年纪");
  302. } else {
  303. //选择过年纪。无处理
  304. }
  305. }
  306. });
  307. }
  308. private void getLoginEvent() {
  309. //检查有没有用户信息
  310. if (Consts.getmConstsUserBean() == null && Consts.getmConstsBaiDuUserBean() == null) {
  311. //百度跟自己的都没有用户信息,请求有没有注册活动,有活动显示活动,没活动不显示
  312. //请求接口
  313. mEventApi.getEventByType(ActivityEventServerImpl.EVENT_TYPE_LOGIN, new Callback() {
  314. @Override
  315. public void onSuccess(HttpInfo info) throws IOException {
  316. HttpResultBean<ActivityEventBean> activityBean = info.getRetDetail(new TypeToken<HttpResultBean<ActivityEventBean>>() {
  317. }.getType());
  318. if (Boolean.valueOf(activityBean.getSuccess())) {
  319. //接口返回成功
  320. if (activityBean.getData() != null) {
  321. //有活动
  322. PopWindowUtil.RegistrationEventsWindow(mView.getActivity(), mView.getRootView(), new PopUtilClickListener() {
  323. @Override
  324. public void clickCancel() {
  325. }
  326. @Override
  327. public void clickSubmit(Object object) {
  328. //点击进行登录逻辑
  329. EfunboxUtil.checkLogin(mView.getActivity(), mView.getRootView());
  330. }
  331. });
  332. } else {
  333. //没活动
  334. }
  335. }
  336. }
  337. @Override
  338. public void onFailure(HttpInfo info) throws IOException {
  339. Logger.e("获取活动失败:" + info.getRetDetail());
  340. }
  341. });
  342. } else {
  343. }
  344. }
  345. private void getYFVip() {
  346. if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
  347. //不是百度渠道,检查是否是义方VIP
  348. if (Consts.getmConstsUserBean() != null) {
  349. mOrderApi.getAuth(mView.getActivity(), new Callback() {
  350. @Override
  351. public void onSuccess(HttpInfo info) throws IOException {
  352. HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
  353. }.getType());
  354. if (!TextUtils.isEmpty(bean.getData())) {
  355. Consts.setIsYFVip(true);
  356. } else {
  357. Consts.setIsYFVip(false);
  358. }
  359. }
  360. @Override
  361. public void onFailure(HttpInfo info) throws IOException {
  362. }
  363. });
  364. }
  365. }
  366. }
  367. @Override
  368. public void registerMobile(String mobileNo) {
  369. if (EfunboxUtil.isMobileNO(mobileNo)) {
  370. Map<String, String> map = new HashMap<>();
  371. map.put("deviceCode", DeviceUuidFactory.getUuid());
  372. map.put("channel", Consts.getUMengChannel());
  373. map.put("mobileNo", mobileNo);
  374. if (MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE).equals("") || MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE) == null) {
  375. //如果没有,默认给一年级
  376. map.put("grade", "PRIMARY_FIRST_GRADE");
  377. } else {
  378. map.put("grade", MMKVUtil.getInstance().decodeString(MMKVEncodeKey.USER_GRADE));
  379. }
  380. String json = ((BaseActivity) mView.getActivity()).getGson().toJson(map);
  381. mUserApi.registerMobile(mView.getActivity(), json, new Callback() {
  382. @Override
  383. public void onSuccess(HttpInfo info) throws IOException {
  384. Logger.e("手机号注册成功:" + info.getRetDetail());
  385. HttpResultBean<UserBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<UserBean>>() {
  386. }.getType());
  387. Consts.setUID(bean.getData().getUid());
  388. //用户是否登录,登录了,创建Consts的userbean
  389. Consts.setmConstsUserBean(bean.getData());
  390. }
  391. @Override
  392. public void onFailure(HttpInfo info) throws IOException {
  393. Logger.e("手机号注册失败:" + info.getRetDetail());
  394. Toast.makeText(mView.getActivity(), "注册失败", Toast.LENGTH_SHORT).show();
  395. }
  396. });
  397. } else {
  398. Toast.makeText(mView.getActivity(), "手机号不正确", Toast.LENGTH_SHORT).show();
  399. }
  400. }
  401. @Override
  402. public void refRecordById(String id) {
  403. switch (mRadioCheckIndex) {
  404. case 2:
  405. if (mRecommendFragment != null) {
  406. mRecommendFragment.getPresenter().getRecordInfoById(id);
  407. }
  408. break;
  409. case 3:
  410. if (mFollowFragment != null) {
  411. mFollowFragment.getPresenter().getRecordInfoById(id);
  412. }
  413. break;
  414. case 4:
  415. if (mCharacterFragment != null) {
  416. Logger.e("mRecommendFragment!=null,下面调用方法");
  417. mCharacterFragment.getPresenter().getRecordInfoByIdSetCharacter3(id);
  418. Logger.e("mRecommendFragment!=null,上面调用方法");
  419. }
  420. break;
  421. }
  422. }
  423. @Override
  424. public void refMyFragment() {
  425. if (mRadioCheckIndex == 0) {
  426. mUserFragment = new MyTabFragment();
  427. changeFragmentLayout(mUserFragment);
  428. }
  429. }
  430. @Override
  431. public void resumeFragment() {
  432. mUserFragment = new MyTabFragment();
  433. mRecommendFragment = new RecommendFragment(0);
  434. mFollowFragment = new RecommendFragment(1);
  435. mCharacterFragment = new CharacterFragment3();
  436. }
  437. public boolean onKeyDown(int keyCode, KeyEvent event) {
  438. switch (keyCode) {
  439. case KeyEvent.KEYCODE_BACK:
  440. case KeyEvent.KEYCODE_ESCAPE:
  441. PopWindowUtil.showExitAppWindow(mView.getActivity(), mView.getRootView());
  442. return true;
  443. }
  444. return false;
  445. }
  446. }