MainPresenter.java 21 KB

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